一、kotlin提高代码的健壮性(稳定性)
1、减少空指针
-
减少定义null属性,可以使用lateinit,或者lazy的形式:private val mAdapter by lazy { ArticleAdapter() }
-
Int类型定义默认0,string类型定义默认为""等
-
定义不为空的变量需要在构造函数或者 init 代码块里赋值
-
private var gif: ImageView? = null这种类型的空定义怎么避免呢?可以参考玩安卓--我的界面MineFragment里的代码来避免(主要通过mBinding来避免)
2、减少强转换造成的异常
-
用泛型来替代,尽量少使用强转换
-
A as B这样用会有隐患,导致crash,改成if(A is B){}这种方式
3、控件的id命名要唯一
尽量保证控件id的命名唯一,保证按下ctl+鼠标左键 ,能定位到唯一的控件,这点在多个页面的时候可以为你省下很多不小心带来的错误
4、使用数据类
使用数据类可以简化代码,避免因手动编写 getter 和 setter 方法而出现的误差。
5、使用扩展函数
使用 Kotlin 中的扩展函数可以更好地抽象出通用的逻辑,避免重复编写相同的功能。
6、 Lambda 表达式和高阶函数
使用 Lambda 表达式和高阶函数可以更好地处理函数指针和函数式编程,提高代码的可读性和可维护性。
7、使用函数式异常处理机制
Kotlin 中的异常处理机制比 Java 更方便,可以使用 try、catch 和 finally 块,来更好地处理程序运行时出现的异常。
8、使用合适的集合和算法
在 Kotlin 中,使用合适的集合类型和算法能够帮助你更好地处理数据,提高代码的效率和稳定性。
9、使用单元测试和前期测试
使用单元测试和前期测试可以及早发现代码中的错误,避免在应用程序发布后出现问题。
二、开发中哪些习惯会影响卡顿的发生,如下:
1.布局太乱,层级太深。
-
1.1:通过减少冗余或者嵌套布局来降低视图层次结构。比如使用约束布局代替线性布局和相对布局。
-
1.2:用 ViewStub 替代在启动过程中不需要显示的 UI 控件。
-
1.3:使用自定义 View 替代复杂的 View 叠加。
-
1.4:使用可空类型和空安全操作符:在 Kotlin 中,使用可空类型(如 String?)可以帮助你在代码中标识空值。与此同时,使用空安全操作符(?.、?:)可以更好地处理这些值,以避免出现空指针异常。
2.主线程耗时操作
-
2.1:主线程中不要直接操作数据库,数据库的操作应该放在数据库线程中完成。
-
2.2:sharepreference尽量使用apply,少使用commit,可以使用MMKV框架来代替sharepreference。
-
2.3:网络请求回来的数据解析尽量放在子线程中,不要在主线程中进行复制的数据解析操作。
-
2.4:不要在activity的onResume和onCreate中进行耗时操作,比如大量的计算等。
-
2.5:不要在 draw 里面调用耗时函数,不能 new 对象
3.过度绘制
过度绘制是同一个像素点上被多次绘制,减少过度绘制一般减少布局背景叠加等方式,如下图所示右边是过度绘制的图片。

4.列表
RecyclerView使用优化,使用DiffUtil和notifyItemDataSetChanged进行局部更新等。
5.对象分配和回收优化
自从Android引入 ART 并且在Android 5.0上成为默认的运行时之后,对象分配和垃圾回收(GC)造成的卡顿已经显著降低了,但是由于对象分配和GC有额外的开销,它依然又可能使线程负载过重。 在一个调用不频繁的地方(比如按钮点击)分配对象是没有问题的,但如果在在一个被频繁调用的紧密的循环里,就需要避免对象分配来降低GC的压力。
减少小对象的频繁分配和回收操作
三、项目中的卡顿优化(实战)
点击按钮跳转到另外一个activity时,卡顿了差不多两秒才显示出来。
优化方向:找到造成卡顿的代码,使用handler或者livedata来运行,目的:先让activity显示出来,再运行卡顿的代码,示例:
Handler handler = new Handler(Looper.getMainLooper()); // 使用handler目的是先显示ui再去运行初始化
handler.post(() -> {
// 这里是卡顿的代码 begin
recognizeViewModel.init();
initRgbCamera();
if (DualCameraHelper.hasDualCamera() && livenessType == LivenessType.IR) {
initIrCamera();
}
// 这里是卡顿的代码 end
handler.removeCallbacksAndMessages(null);
});
使用livedata的方式会更好,这里省略示例代码
文章讲述了如何利用Kotlin特性增强代码的健壮性和稳定性,包括减少空指针、避免强转换、使用数据类和扩展函数等。同时,提出了优化Android应用性能的建议,如简化布局、避免主线程耗时操作、减少过度绘制以及列表优化等。

292

被折叠的 条评论
为什么被折叠?



