Android 启动页白屏与黑屏

Posted 亮亮在江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 启动页白屏与黑屏相关的知识,希望对你有一定的参考价值。

最近项目中加入了启动页与广告页,发现了一些共性的问题,在此记录一下希望能对有需要的同学帮助。问题就是点击app图标启动时第一眼看到会有白屏或者黑屏的现象,然后点击广告页跳过也会有白屏或者卡顿问题。
接下来看一下APP冷启动流程:

 整个流程可以概括如下:

1. 点击桌面应用图标,Launcher进程将启动Activity(MainActivity)的请求以Binder的方式发送给了AMS。
2. AMS接收到启动请求后,交付ActivityStarter处理Intent和Flag等信息,然后再交给ActivityStackSupervisior/ActivityStack
处理Activity进栈相关流程。同时以Socket方式请求Zygote进程fork新进程。
3. Zygote接收到新进程创建请求后fork出一个新进程(App主进程)给应用。并在主进程中创建ActivityThread对象和开启Looper消息循环,开始处理创建Activity。
4. 在创建Activity之前,如果自定义了Application类,会创建和初始化Application类。
5. ActivityThread利用ClassLoader去加载Activity、创建Activity实例,并回调Activity的onCreate()方法。这样便完成了Activity的启动。

那么如何解决白屏或者黑屏?
可以给启动页设置theme主题,可以设置成纯颜色(设置一个和Activity UI相似的背景),也可以设置成要加载的图片

        <activity
            android:name=".userlogin.ui.activity.SplashActivity"
            android:exported="true"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@style/AppThemeNoAction.StartingWindowTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  <!-- 应用启动页(StartingWindow)的theme -->
    <style name="AppThemeNoAction.StartingWindowTheme">
        <!-- 可以设置成纯颜色(设置一个和Activity UI相似的背景) -->
        <item name="android:windowBackground">@drawable/preview</item>
    </style>

其中的 windowBackground 设置,可以设置为 *.xml 文件 也可以直接设置为 图片。
设置图片,图片固定,设置xml文件可以实现复杂效果。
在res/drawable下新建一个layer-list,比如bg_splash.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <!-- 图片 -->
        <bitmap
            android:gravity="center"
            android:src="@drawable/preview" />
    </item>
</layer-list>

另外点击广告页跳过按钮到主页面时也会有白屏效果,此时可以设置
设置android:windowDisablePreview属性,禁用窗口的预览动画, 在MainActivity显示之前,系统永远不会使用窗口的主题来显示它的预览

<!-- 普通Activity(StartingWindow)的theme -->
    <style name="AppThemeNoAction.ActivityStartingWindowTheme">
        <item name="android:windowDisablePreview">true</item>
    </style>

以上内容很好的解决了启动页和广告页白屏黑屏问题,希望对大家有帮助!

以上是关于Android 启动页白屏与黑屏的主要内容,如果未能解决你的问题,请参考以下文章

Android 启动页白屏与黑屏

Android 启动页白屏与黑屏

解决 Android APP 启动页白屏问题及如何实现全屏显示

Android适配刘海屏+沉浸式状态栏+启动页白屏解决方案

Android启动黑屏白屏解决方案

Android开发中页面启动时黑屏或者白屏的原因及解决办法