优化App冷启动,实现启动页错觉秒开

APP启动时,界面会首先展示一个白屏或者黑屏,然后再进入欢迎页,稍作停留最后进入APP主页。进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态的,这可能会让用户会以为没有点到APP而再次点击,极大的降低了用户体验,Android需要及时做出反馈去避免这段时间的尴尬。于是系统会根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏。这个黑(白)屏就称为Preview Window,即预览窗口。

安卓启动方式一般有3种:

>Coldstart——冷启动:

此种方式最为耗时,一般是因为进程被干掉或者是第一次启动app,系统需要重新fork进程进行一系列初始化,后台没有该应用的进程。

>WarmStart ——暖启动

比ColdStart稍快,当app的Activities被销毁,但还在内存中常驻时启动方式会变为暖启动,app并没有被杀掉,所做的只是把app从后台提到前台来展示,并不需要重走初始化一系列行为,减少了对象初始化、布局加载等工作。但其表现行为与冷启动一致,还是会先显示一个Preview Window(黑白屏)直到app渲染activity。

如果由于响应了低内存事件,例如在onTrimMemory()方法中清除了资源对象,那么这些对象就需要在热启动时重新创建。

>LukeWarm Start——热启动

启动方式最快,比暖启动开销小,类似于按返回键back、home键退出应用又立即进入的那种行为,后台已有该应用的进程。

接下来看看如何优化冷启动:

既然我们已经找到这个黑白屏是出自系统的预览窗口,我们就可以通过操控这个窗口来实现。这个预览窗口是在activity启动页前显示的一个安卓优化措施,我们可以从主题中可以找到,是可以设置这个窗口配置的。

1.更改窗口的颜色背景

2.设置窗口全屏显示

在Manifest文件中的启动页activity添加自定义的主题android:theme="@style/SplashTheme"

优化App冷启动,实现启动页错觉秒开_第1张图片

接下来看看style的属性配置,父主题可使用parent="@android:style/Theme.NoTitleBar.Fullscreen"

优化App冷启动,实现启动页错觉秒开_第2张图片

以上name="android:windowBackground”背景你可以设置多种,如果是设置为透明要将true设置为true,当点击运行app后是透明背景的,给人的一种系统响应慢的错觉,完美甩锅。若是设置一张图片,也要设置false,即可实现秒开闪屏效果。而我这里是在drawable中新建splashx_bg.xml使用bitmap位图设置的背景图,能够对图片做更多的设置操作。


优化App冷启动,实现启动页错觉秒开_第3张图片

最后注意:Preview Window设置的背景图如果不做处理,图片就会一直存在于内存中,所以,当我们进入到欢迎页的时候可不要忘了把背景图设置为空

优化App冷启动,实现启动页错觉秒开_第4张图片

透明背景:

透明背景


位图bitmap加载:

优化App冷启动,实现启动页错觉秒开_第5张图片
位图bitmap



直接设置图片:

图片


2018/11/2最后补充一下需要注意
:在Android 8.0即api26,谷歌对于AndroidManifest.xml中设置了锁定屏幕android:screenOrientation="portrait"的透明activity会报以下错误“Only fullscreen opaque activities can request orientation”,经测试不管是否全屏都如此,在8.1后谷歌修复了这个bug。解决方法我个人是去掉锁定屏幕设置或者将android:theme="@style/SplashTheme"中的透明背景设置均改为不透明android:windowIsTranslucent改为false 参考传送门,建议采用图层设置位图bitmap的方式易于适配(刘海屏等)

你可能感兴趣的:(优化App冷启动,实现启动页错觉秒开)