从3个角度优化:
产品设计:
- 设计一张和app首页主题差不多的图片过度,点击app时能够立即有窗口动画响应
- 点击app,立马进入1个弹窗界面,让用户接收权限,登录,提醒等。偷偷在后台启动首页
- 一些重量级的sdk做成插件化需要的时候动态加载,避免冷启动阶段初始化sdk台耗时
App:
- 布局层级和数量优化,减少层级和要展示的内容
- 从trace找到最主要的性能瓶颈(通常是oncreate过程inflate,layout,messure,draw时间过程耗时)
- 点击app到startActivity阶段可以从日志Start proc,点击事件从trace可能看到,如下所示
- 耗时业务放子线程,例如异步infalte xml
- 预加载服务端接口数据,viewholder,Activity
- 首页不需要业务,放在idlehandler延迟加载
系统:
- 配置baseline_profile,将启动阶段的class和方法预编译成oat文件,配置到profile文件中声明
- dex2oat,编译系统时将指定系统预装app大部分代码编译成oat文件,加快代码执行速度
- 启动阶段提高进程RenderThread,UI,AdrenoOsLib线程的优先级
- 去掉class verify(效果明显,但有未知风险,暂时没有采用)
- redex把dex和资源文件重排序?