Activity启动黑屏/白屏的原因
Activity的onCreate()方法中调用了setContentView()方法,传入了我们绘制的layout文件,也就是我们应该看到的Activity内容。但是Android系统在启动一个新的Activity时,首先进行的不是绘制Activity ContentView。下图为Activity的UI结构。
可见,一个Activity中在ContentView的外围还有PhoneWindow、DecorView、TitleView,当Activity进行绘制时会先绘制这三个控件,此时ContentView还没加载进来,所以什么东西都看不到,系统会将屏幕填充主题默认的背景色,就出现了Activity启动之前的黑屏/白屏现象。
解决方法
1) 将主题背景设置成一张图片,但图片的屏幕适配问题就需要考虑了,主题中的背景图片会自动拉伸
<style name="AppTheme" parent="android:Theme.Light.NoTitleBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowBackground">@drawable/bg_splash</item>
<item name="android:WindowFullscreen">true</item>
</style>
2) 将主题背景变成透明的,这样在ContentView加载出来前,会透过启动的Activity看到桌面,不会存在黑屏/白屏的现象,再将标题栏去掉,把Activity设置成全屏的。缺点是如果启动的是一个有复杂耗时操作的Activity,会有一种延迟的感觉。
<style name="AppTheme" parent="android:Theme.Light.NoTitleBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:WindowFullscreen">true</item>
</style>