首先来描述一下问题:
最近使用华硕的pad测试Demo的时候,偶然发现App启动的时候会先出现一个白屏,最开始以为是设备卡顿造成的,后来发现每次都会出现,瞬间玻璃心碎了一地,开始下载各种应用,反复打开关闭,发现不是只有我自己写的Demo会有这种问题,甚至连系统自带的一些页面打开也会出现黑屏/白屏。具体情况如图所示:
我当时的AndroidManifest.xml文件内容如下:
styles.xml文件内容:
原因分析:
经过研究发现,当App启动的时候,首先会执行Application中的onCreate(),在进程创建和初始化的过程中,Activity是没有执行的,而是执行了startingWindow,显示一个空的DecorView,而前面提到的黑屏/白屏有很大关系。
如果你选择了Black系列的Style,就会出现黑屏:
android:theme="@style/android:Theme.Black"
如果你选择了Light系列的Style,就会出现白屏:
android:theme="@style/android:Theme.Light"
解决方法:
只需要在设置Theme的时候添加如下属性:
<style name="AppTheme" parent="android:Theme.Black">
<!-- Customize your theme here. -->
<item name="android:windowIsTranslucent">true</item>
</style>
上面这样处理有时候会造成App启动慢的假象,实际上在App启动后的一小部分时间内,还显示的是桌面,而且这段时间内点击桌面很可能会没有响应(部分应用),当然这个方法也不适用于Activity间的跳转。
除了上面说的一种方法外,在App启动的时候还可以采用另外一种方式,直接在style中设置android:background显示为图片背景:
<style name="AppTheme" parent="android:Theme.Black">
<!-- Customize your 不theme here. -->
<item name="android:background">@mipmap/ic_launcher</item>
<!--<item name="android:windowIsTranslucent">true</item>-->
</style>
参考:
http://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/
https://www.bignerdranch.com/blog/splash-screens-the-right-way/
http://blog.csdn.net/yanzhenjie1003/article/details/52201896