一、App启动速度优化
1.1 Google 加速方案
利用提前展示出来的Window,快速展示出来一个界面,给用户快速反馈的体验;
避免在启动时做密集沉重的初始化(Heavy app initialization);
定位问题:避免I/O操作、反序列化、网络操作、布局嵌套等。
1.2 通用加速方案:
利用主题快速显示界面;
异步初始化组件;
梳理业务逻辑,延迟初始化组件、操作;
正确使用线程;
去掉无用代码、重复逻辑等
1.3 启动方式:
冷启动
当启动应用时,后台没有该应用的进程(常见如:进程被杀、首次启动等),这时系统会重新创建一个新的进程分配给该应用
暖启动
当启动应用时,后台已有该应用的进程(常见如:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用
热启动
相比暖启动,热启动时应用做的工作更少,启动时间更短。热启动产生的场景很多,常见如:用户使用返回键退出应用,然后马上又重新启动应用
热启动和暖启动因为会从已有的进程中来启动,不会再创建和初始化Application
平时我们讨论中基本都会将暖启动和热启动合在一起统称为热启动,因为暖启动与热启动差异很小,如果不是特别留意启动流程,那么在用户体验和感官上没有直接差异,但是在framework层执行时是有一定差异的。本次优化点也是围绕冷启动和热启动来做,将暖启动与热启动统称为热启动
另外有一点,从绝对时间上来看,app安装后的首次启动将会最耗时,因为首次启动会新建数据库,sp文件,各种缓存,配置等。
白屏/黑屏问题
白屏或黑屏,具体是哪一个,取决于app的Theme使用的是dark还是light主题。
Android Studio 引起的白屏
2.x时代的AS开启了instant run以后可能会导致白屏,但实际完整的apk包不会出现此问题。
冷启动引起的白屏/黑屏
点击你app那一刻到系统调用Activity.onCreate()之间的时间段。在这个时间段内,WindowManager会先加载app主题样式中的windowBackground作为app的预览元素,然后再真正去加载activity的layout布局。
暖启动/热启动引起的白屏/黑屏
这点在配置较好,内存空间充足的手机上不是很明显,但低端手机或者内存吃紧的情况下依旧会出现”闪屏”效果,持续时间很短,一闪而过。
二、布局优化方案
2.1 通用布局优化方案
调试GPU过度绘制,将Overdraw降低到合理范围内;
减少嵌套层次及控件个数,保持view的树形结构尽量扁平(使用Hierarchy Viewer可以方便的查看),同时移除所有不需要渲染的view;
使用GPU配置渲染工具,定位出问题发生在具体哪个步骤,使用TraceView精准定位代码;
使用标签,Merge减少嵌套层次、ViewStub延迟初始化。
相关工具:
(1)、打开Show GPU Overrdraw的选项:设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制;
(2)、Hierarchy Viewer
2.2 检测应用在UI线程的卡顿
利用UI线程Looper打印的日志;
利用Choreographer。
开源地址:
https://github.com/markzhai/AndroidPerformanceMonitor[方式1]
https://github.com/wasabeef/Takt[方式2]
https://github.com/friendlyrobotnyc/TinyDancer [方式2]
三、内存优化方案
3.1 通用方案
节制地使用Service
当界面不可见时释放内存
当内存紧张时释放内存
避免在Bitmap上浪费内存
使用优化过的数据集合
使用ProGuard简化代码
利用工具检测内存泄漏(https://developer.android.google.cn/studio/preview/features/android-profiler.html#advanced-profiling)
本文为51Testing经授权转载,转载文章所包含的文字来源于作者:龚十一。如因内容或版权等问题,请联系51Testing进行删除。原文链接:https://www.jianshu.com/p/36751d5c5a9f。