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>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值