Android应用启动时白色闪屏原因及解决办法

白色闪屏现象:

如果OnCreate()onStart()onResume()中操作太多,耗时较久。那么就会在主界面显示出来之前出现白色闪屏。为了更清晰的看出白色闪屏,这里在代码中执行50000次打印Log操作。代码及效果如下所示:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //这里执行了50000次打印log,可自行修改
        for (int i = 0; i<50000;i++){
            Log.d(TAG, "onCreate: "+String.valueOf(i));
        }
    }
}

Android应用启动时白色闪屏原因及解决办法_第1张图片

原因:

ActivityonResyme()完成后才显示布局,在这期间,由于应用有背景颜色(背景图片),所以会首先显示应用的背景。

我们查看下源码:
新创建的应用默认主题为@style/AppTheme,一直查看它的父类会发现Platform.AppCompat.Light中定义了一个android:windowBackground的属性。

@color/background_material_light

继续往下看

@color/material_grey_50
它的值为material_grey_50

#fffafafa值为白色。

也就是说,应用的背景为白色。显而易见,罪魁祸首就是它。。。

解决:

查找到了原因,我们就可以针对的去解决它。这里找到了三种解决的办法(如果哪位大神有更好的办法请分享出来,非常感谢~)。

1 . 把应用默认主题设置为透明主题。例如:

android:theme="@android:style/Theme.Translucent.NoTitleBar
注意:这里需要修改mainActivity继承Activity,否则会报错。

效果图如下所示:
Android应用启动时白色闪屏原因及解决办法_第2张图片

可能大家看不出什么变化,认真观察你会发现,手机上多了白色闪屏hellow World(中间),这是因为我们设置了透明主题,而且activity没有背景色,所以只显示了两个view组件。但是重点是,没有白色闪屏了!!!

2 . 修改当前主题中的属性,在属性中添加应用背景透明。
true

效果图如下:
Android应用启动时白色闪屏原因及解决办法_第3张图片

上面两种方式都有个小问题不知道大家发现没有,就是点击APP图标后很久才能进入activity。也就是说,用户体验仍然不好,这是因为背景透明之后显示的仍然是手机桌面,那我们能不能用颜色或者图片代替它呢?当然可以。请看第三种方法。

3 . 修改当前主题中的属性,在属性中添加背景图片。
@mipmap/logo

效果图如下:
Android应用启动时白色闪屏原因及解决办法_第4张图片

这种情况下,所有activity中的背景也会变成该图片,此时为Activity设置自己的背景图片即可。

总结:

Android应用启动时白色闪屏最好的解决办法是为应用设置背景图片(logo作为欢迎页),并为各个activity设置相应的背景。

你可能感兴趣的:(Andorid问题库)