启动优化(中篇)
本文链接:https://blog.csdn.net/feather_wch/article/details/131587046
1、我们可以优化部分
Application构建到主界面onWindowFocusChanged
2、启动方式(官方)
- 冷启动
- 热启动
- 温启动
3、怎么样算是卡顿?
- 卡顿:2-5-8原则
- 2秒以内:流程
- 2-5秒:可以接受
- 5-8秒:有些卡顿
- 8秒以上:非常卡顿,没办法接受,垃圾应用
4、Android Vitals是什么?
- google提出的计划,检测三种启动方式的耗时
- 冷5 热1.5 温2
5、如何查看App启动耗时时长?(app点击->可操作的时候onWindowFocuseChanged)
- 系统日志统计:
ActivityManager:Displayed
- adb 命令统计启动时间:
adb shell am start -S -W
6、CPU Profile/TraceView(废弃)相关图表
- Call Chart
- Flame Chart
- Top Down Tree
- Bottom Up Tree
7、假如版本不支持CPU Profiler怎么办?
- Debug.start/stopMethodTracing()
- Application创建时调用start(需要手动给予文件权限)
- onWindowFocuseChanged调用stop
- 文件默认生成在/sdcard/目录下,可以拖到AS中打开
8、StrictMode 严苛模式 setThreadPolicy()/setVmPolicy()
可以在开发阶段严格限制各个耗时操作、IO未关闭等等
出现违规操作根据配置,选择打印日志或者崩溃。
9、黑白屏各个版本差异
- windowSplashscreenContent Android8~Andorid11 优先于windowBackground
- Android12推出JectPack SplashScreen(基于Android SplashScreen API)同名库兼容到Andorid 6
- windowDisablePreview:会关闭黑白屏,但是进入时间更长更慢,体验不好
- 自定义简易的SplashScreenActivity+windowDisablePreview:可以做到进入可以打开一个有节日氛围的页面
10、如何减少inflate的时间?
- AsyncLayoutInflater帮助异步Inflate减少启动时间
11、AsyncLayoutInflater的局限性:
- 构建的View中没有Looper.prepare()需要我们自己去实现(子线程)
- 不支持设置LayoutInflater.Factory和LayoutInflater.Factory2
- 缓存队列默认大小10,超过了会导致主线程等待
12、EventBus、Arouter启动和初始化很耗时,可以采用接入插件来减少初始化时间,优化启动速度。
13、启动优化项的几个方面
- 合理使用异步初始化、延迟初始化、懒加载
- 启动过程避免耗时操作,数据库IO不放在主线程
- 类加载优化:提前异步执行类加载
- 合理使用IdleHandler进行延迟初始化
- 简化布局
14、应对面试的处理步骤!!
- 告诉对方,启动耗时统计的方案。
- 分析工具
- 发现了一些第三方库初始化比较耗时,可以放到子线程中处理。有些不可以。
- ARouter启动时间很慢,看github发现有新版本的插件可以使用,提升了启动速度
15、启动速度和内存优化也有关系?为什么会有影响?文章来源:https://www.toymoban.com/news/detail-531874.html
- 和抖动和GC有关
16、字节 multidex 优化启动速度 => 误导读者文章来源地址https://www.toymoban.com/news/detail-531874.html
- 文中分析源码,用多进程去优化multidex速度,多进程本身只是不为了让APP ANR
- 修改了谷歌的multidex,谷歌multidex会将dex -> zip 比较耗时。真正优化在于去除了该步骤。
到了这里,关于Android启动流程优化 中篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!