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

前言

问题:在App启动过程中会出现闪白屏或黑屏的一段时间才进入布局界面。

首先来了解一下

冷启动

该App之前没有被系统加载到VM虚拟机,且未缓存此App数据,并且后台无该App线程,启动App称为:令启动

热启动

App启动后,按back键退出程序,此时App线程还缓存在后台,启动App后Application因为已经缓存,所以直接进入Activity。称为:热启动

问题之源

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时,Activity中onCreate()-->setContentView()并不会马上加载布局,而是先初始化绘制Application window窗体,这个时候布局还没加载,使用的是默认背景色,其次才执行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>

在代码中

new Thread(new Runnable() {
			
    @Override
    public void run() {
        try {
            Thread.sleep(3000);
        }
        catch (InterruptedException e)
        {}
        startActivity(new Intent(MainActivity.this, A.class));
        finish();
    }
}).start();
发布了15 篇原创文章 · 获赞 16 · 访问量 4160

猜你喜欢

转载自blog.csdn.net/qq_42470947/article/details/104073212