【Android】解决启动APP闪黑/白屏

前言

问题:在App启动过程中会出现闪白屏或黑屏的一段时间才进入布局界面。这样的体验十分不好。

首先来了解一下

冷启动

当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

热启动

当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

问题之源

Application 或 Activity 的Theme比如使用了以下 Theme:

<style name="AppTheme" parent="@android:style/Theme.Light.NoTitleBar">
    <!-- 令启动App时,出现闪白屏-->
</style>
<style name="AppTheme" parent="@android:style/Theme.Black.NoTitleBar">
    <!-- 令启动App时,出现闪黑屏-->
</style>

原因:当启动App时,此时后台无改App线程的缓存,就会分配一个新线程给这个应用,并创建初始化Application类,

系统会在加载初始化布局之前(Activity 中 onCreate()-->setContentView()),首先会初始化窗口Window,而Window顶层是一个DecorView,此时的背景属性设置就是由Theme设置的值(没有则默认值),其次才执行setContentView()。所以就出现了闪白或黑屏的现象。

解决方案

此方案是 main入口启动 SplashActivity 启动页 ,在onCreate() 方法中新建线程延迟时间启动 MainActivity。

核心代码 系统背景属性:

<item name="android:windowBackground">@drawable/image</item>

定义style: 

<style name="SplashTheme" parent="AppTheme">
    <!--设置背景图片-->
    <item name="android:windowBackground">@drawable/image</item>
</style>

在AndroidManifest中引用

<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>

在SplashActivity onCreate()代码中

new Thread(new Runnable() {
			
    @Override
    public void run() {
        try {
            Thread.sleep(3000);
        }
        catch (InterruptedException e)
        {}
        startActivity(new Intent(SplashActivity.this, MainActivity.class));
        finish();
    }
}).start();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚妄狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值