启动速度与执行效率优化项目实战(二):启动黑白屏解决

img

为什么会有黑白屏

在桌面点击应用图标后,在app进程没有创建的情况下,需要时间创建app进程,初始化资源,以及启动首页Activity的(这里讨论的首页是指AndroidManifest里面标志的启动页),这就意味点击图标不能马上看到启动页。为了不让用户有卡顿的感觉,谷歌有了Preview Window,在启动页没有绘制完成时,会先初始化一个Window,我们通常看到的黑屏或白屏,就是这个预览窗口。

怎么知道是黑屏还是白屏?

黑白屏是预加载的窗口,这个窗口的一些属性可以在theme里更改。新建一个项目,会在AndroidManifest的application所属标签里面的内容看到android:theme="@style/AppTheme",这个是默认的theme。查看这个AppTheme,找到name="android:windowBackground"这个属性,查看属性下的内容,就能知道是黑屏还是白屏,这个属性就是设置预览窗口的背景。无论是黑屏还是白屏,给用户的体验都不好,所以就有了把背景设为透明或者用一张图片来作为启动背景的解决办法。这些只是很基本的解决办法,而且存在一定的弊端,既然我们要让用户体验更好,就应该处理得更加优雅一些。

如何优雅的解决黑白屏

解决黑白屏,需要和启动页结合起来。现在的APP基本上都有闪屏页,有些是为了加载广告,有些是为了通过闪屏页初始化App的一些资源,本篇文章就讨论有闪屏的启动页,以网易云音乐对预加载窗口和闪屏页的处理来举例。来看看网易云的预加载页和启动页。

img
img

第一张是预加载页,第二张是闪屏页,闪屏页只比预加载页多了底部的图标和网易云音乐这四个字(其实是一整体,一张图片),而且给人的感觉是一直是预加载页,不过底部的图标和文字会慢慢出现,这样的处理比单独的显示图片或者设置为透明更让人能够接受。下面我们就来看看代码。

styles文件自定义Theme