为什么要做启动优化呢?
当用户启动App之后会立即展示出一个空白页,这个空白时间大概为1~2秒,然后再跳转到App的正常界面,这种闪屏等待的过程,对用户的体验度是有影响的。
启动应用分别分为以下三种
冷启动 热启动 温启动
- 用户点击桌面加载启动App(桌面系统(launcher)也是一个app,系统所维护属于应用程)
- App启动之后会立即出现一个空白页(跟随主题)
- 创建App的进程及App对象
- 启动MainThread创建启动的Activity对象
- 加载View,布置屏幕,开始绘制
Google爸爸也给出了启动优化的三个方向
- 利用提前展示出来的Window,快速展示出来一个界面,给用户快速反馈的体验;
- 避免在启动时做密集沉重的初始化(Heavy app initialization);
- 定位问题:避免I/O操作、反序列化、网络操作、布局嵌套等。
解决方案
可以提前展示出的Window,快速的展示出一个页面展现给用户
- 在style.xml文件中创建一个StartTheme样式主题
//APP启动优化
<style name="StartTheme" parent="Theme.AppCompat.Light.NoActionBar">
//引用上面start_activity_background.xml背景文件
<item name="android:windowBackground">@drawable/start_activity_background</item>
<item name="android:windowFullscreen">true</item> //填充整个窗口设置
</style>
- 在清单文件AndroidManifest.xml中替换主题样式
android:theme="@style/StartTheme"
在启动展示的Activity界面动态的替换回App的正常主题样式,一定要在super.onCreate()之前执行
当然还有别的方法进行实现这种效果
Application 作为 应用程序的整个初始化配置入口,时常有很多第三方组件(包括App应用本身)都在 Application 中抢占先机,完成初始化操作
- 子线程初始化各种第三方或者个人工具库
- 使用懒加载(按需所用)
- 不要在几大生命周期里做耗时操作(逻辑+view+图片内存)
- 不建议使用newThread,使用IntentService;newThread实现导致数据不完整,intentservice,不管怎么跳转我在后台执行任务,保证数据完整
网友评论