Android 应用白屏、黑屏、闪屏解决方法 (秒开应用思路)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011418943/article/details/88537446

当应用的界面需要时间渲染的时候,就会出现上面的白屏和黑屏问题;

问题复现:

  • 开机引导中有用户协议一大串字符,导致打开卡机引导白屏

从上面知道了,就是因为字符串太多了,需要渲染的时间较多,导致白屏了。

StartingWindow 惹的锅

从 Android 的绘制流程我们知道,都是 先绘制背景再绘制内容 的。
但是,从Activity 的onCreate 中 setContentVeiw(),设置了布局,那么它就应该显示我们的布局了啊,怎么还会出现上面这种情况呢?原因如下:
当我们打开一个应用的时候,Android 会检测 Activity 所属的 application ,如果该 application 进程还没有创建,则系统会先创建 application ,这也是 application 比 activity早的原因。而 进程的创建是需要时间的,且创建之后, setContentView 的渲染也需要一定的时间,如果内存较低,或者view 的过于复杂,旋绕时间就比较长了;总的来说,就是进程的创建和初始化完成需要时间,如果这个时间比较久,就会出现上诉的情况。
那怎么办,进程都起来,总得让用户知道把,于是 就有了 startWindow 这个 window ,实际上它是一个准备过程,所以,当进程初始化完毕,UI渲染完成,它就会被移除,才会显示我们设计好的 View。而 startWindow 这个 window 就是白屏,黑屏罪魁祸首了。

那白屏,黑屏又是怎么来的呢?

当 startWindow 启动的时候,没有什么UI ,其实就是背景,当你的 theme 选择是 Theme.AppCompat.Light 的时候,它就是白屏,当你选择是 Theme.AppCompat.DayNight 的时候,它就是黑屏了。
知道了原理,就是我们只需要把背景设置成透明的,就没有这个问题了,如下,设置主题的背景色:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
	 <!-- Customize your theme here. -->
	 <item name="android:windowFullscreen">true</item>
	 <item name="android:windowIsTranslucent">true</item>
	 ...

加上,解决问题

闪屏

由于背景是透明的,当从 开机引导进入 launcher 的时候,还发现了 闪屏的问题,想了想,其实加一个退出动画就可以了,由于 activity 是 window 级别的,所以,style 如下:

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <!--加个动画-->
        ...
    </style>

    <!--window动画-->
    <style name="TransAnim" parent="@android:style/Animation.Activity">
        <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
        <item name="android:windowExitAnimation">@android:anim/fade_out</item>
    </style>

秒开应用思路

从上面知道白屏和黑屏的出现过程,把背景设置成透明就解决了,那就是每个应用再进入的时候,通常都会有个 SplashActivity,只要把它的背景设置成一张图片,然后再 style 里面设置:

<item name="android:windowBackground">@mipmap/splash</item>

看起来就是秒开了呢

猜你喜欢

转载自blog.csdn.net/u011418943/article/details/88537446