App启动白屏和黑屏如何处理?

一、原因:
在应用刚启动和应用未初始化完全之间有一段时间空隙,叫StartingWindow,看起来就像Activity已经启动,只是没填充好数据。所以它是个临时窗口,对应的WindowType是TYPE_APPLICATION_STARTING。目的是告诉用户,系统已经接受到操作,正在响应,在程序初始化完成后实现目的UI,同时移除这个窗口。

Window布局的顶层是DecorView,StartingWindow显示一个空DecorView,但是会给这个DecorView应用这个Activity指定的Theme,如果这个Activity没有指定Theme就用Application的(Application系统要求必须设置Theme)。

activity启动时,windowbackground比setcontentview要先加载,这一段时间如果theme是白的、透明的。屏幕就是白色的,黑的就会显示黑屏,不美观;

总结:还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景,window和Style密切相关。
所以我们的白屏和黑屏和空DecorView息息相关,我们给APP设置的Style就决定了是白屏还是黑屏。

1、如果选择了Black的系列的主题那么Activity跳转的时候就是黑屏:

@android:style/Theme.Black”

2、如果选择了Light的系列的主题那么Activity跳转的时候就是白屏:

@android:style/Theme.Light”

参考:http://blog.csdn.net/yanzhenjie1003/article/details/52201896

二、解决办法:
1.使用透明主题

2.设置windowbackground:我们之前设置了Window透明,实现了去掉白屏和黑屏,现在要弄一个颜色或者图片来代替白屏和黑屏,所以首先要把原来style中的透明属性去掉。然后给Window设置一个背景颜色或者图片。

public class SplashActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }
}
<activity android:name=".SplashActivity"
    android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        intent-filter>
activity>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item android:drawable="@color/white" />

    <item>
        
        <bitmap
            android:gravity="center"
            android:src="@drawable/wel_page" />
    item>

你可能感兴趣的:(Android知识簿)