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,它会将所有数据加载至内存中
-谨慎使用外部库
-业务架构设计合理
-线程进行优化