Android开发技术

Android开发过程中遇到的问题及解决方案

Android开发过程中遇到的问题及解决方案

by 孔帅 常 -
Number of replies: 0
Picture of 2020春学期

Android APP启动缓慢,优化总结如下:

-获取方法耗时

-AOP,监控代码和业务代码隔离

-异步初始化

-启动器:抽象成Task,依赖关系,异步队列,异步线程池跟CPU核数相关

-延迟初始化

-结合IdleHandler,CPU空闲时执行

-提前加载SharedPreferences,Multidex之前加载

-启动阶段不启动子进程

-提前异步类加载,在Multidex.install()之后,开启异步线程,用Class.forName()方式进行类加载,等到这个类真正被使用的时候,就不会触发类加载的过程,在主线程中就非常节省时间。

-在看systrace图时,发现有的手机并没有给满的CPU,比如有的八核手机只给了四核使用,可以使用黑科技将CPU核心数以及CPU的频率进行拉高,提升启动速度。



APP运行卡顿,优化总结如下:

-获取方法耗时

-第一阶段:系统工具定位、解决,初期代码重构,异步、延迟

-第二阶段:自动化卡顿方案优化,线上卡顿难以重现:自动化卡顿方案,思路来自Android消息处理机制,主线程执行的任何代码最后都会到Looper.loop()函数当中,而这个函数中有个mLogging对象,它在每个消息的执行前后,都会被调用,利用这个前后处理时机,做的自动化监控;同时,我们也完善了线上ANR的上报,采取的方式是监控ANR日志信息,同时结合ANR-WatchDog,作为高版本没有文件权限的一个补充方案。

-第三阶段:线上监控及线下检测工具建设,形成了来一套完善多维度的解决方案


卡顿优化大方向

-内存泄漏

-内存抖动

-Bitmap


具体优化细节

-LargeHeap属性,申请更多的内存

-onTrimMemory,系统低内存回调,根据低内存等级

-使用优化过的集合,SparseArray

-谨慎使用SharedPreference,第一次加载SharedPreference,它会将所有数据加载至内存中

-谨慎使用外部库

-业务架构设计合理

-线程进行优化