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

本文分析了Android应用启动时出现白色闪屏的原因,主要是由于默认主题背景颜色为白色。提供了三种解决方法:1) 设置应用透明主题;2) 修改主题背景透明;3) 设置背景图片。最佳实践是在主题中添加背景图片,以改善用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

白色闪屏现象:

如果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));
        }
    }
}

白色闪屏现象

原因:

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

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

<item name="android:windowBackground">@color/background_material_light</item>

继续往下看

<color name="background_material_light">@color/material_grey_50</color>
它的值为material_grey_50

<color name="material_grey_50">#fffafafa</color>值为白色。

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

解决:

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

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

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

效果图如下所示:
透明主题

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

2 . 修改当前主题中的属性,在属性中添加应用背景透明。
<item name="android:windowIsTranslucent">true</item>

效果图如下:
透明属性

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

3 . 修改当前主题中的属性,在属性中添加背景图片。
<item name="android:windowBackground">@mipmap/logo</item>

效果图如下:
这里写图片描述

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

总结:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值