一般的我们从手机桌面打开一个应用,最为常见的一种情况下是它经历一个短时间的 白屏或黑屏 再到启动页面,再者是在 桌面短时间的停留 随后才到启动页面; 然而,这两者都是要花费些等待时间的(虽然没有很久),当然也是用户所不愿等而且不期望看到的,从用户感知上最为直接的体验就是要响应快并且加载也快。
那么要如何做到呢?,我们有必要事先了解下程序启动的内部机制。
启动过程的内部机制
ColdStart
进程被系统杀掉或者第一次启动发生的状态
WarmStart
app驻留在内存,所以系统所做的只是把app从后台带到前台, 免去了重复的对象初始化以及布局渲染等的操作,其表现形式跟ColdStart一样,也是一开始呈现一个空白页面直到app完成渲染让用户所看到
LukeWarm Start
可以认为是ColdStart操作中的子集,系统所做的同样只是把app从后台带到前台,只不过较WarmStart来说开销小点。 比如用户主动退出程序随后又立即启动它。
app的启动可以是处于这三种状态中的一种,但是对于ColdStart来说,所要做的工作比其他两种状态要多;
处于ColdStart状态的一开始系统会立即渲染一个启动背景窗口紧接着才会去创建app进程, 经过一系列的对象创建,视图绘制,渲染之后把这个背景窗口替换成为你app的主活动视图(应用程序的入口类),然后你才能开始使用app。
优化建议
避免在Application和MainActivity的onCreate方法做过多繁重的初始化操作
很多依赖的三方sdk可以根据优先级,使用多线程、懒加载的方式,只加载当前立即需要用的,非必要的延后再操作
使用主题启动屏幕
上面提到的 白屏或黑屏 正是ColdStart状态下一开始渲染的启动背景窗口 ,至于有时候白色或黑色取决于你主题的设置。
使用主题的Activity应该是一个闪屏页,不具有按钮事件,其他控件的交互行为,仅仅只是一个宣传页/logo页,应用必要的一些初始化操作。
|
|
你会发觉没有这个 白屏或黑屏 出现了,但是你去打开应用出现 桌面短时间的停留
最后的解决办法是设置闪屏页的windowBackground背景图:
|
|