程序员

Android冷启动白屏解决方案

2017-06-27  本文已影响580人  不灬语

1.什么是冷启动

冷启动其实就是应用第一次启动,或者说启动之后后台被杀掉了又重新启动app的情况.比如小米通过菜单键杀掉应用后台,重新启动app.

应用冷启动的时候其实会在Application做一些初始化工作,大部分第三方都是在Application初始化的.初始化完才会启动SplashActivity做初始化工作,然后才是进入MainActivity.这其中看起来很简单,其实可以对app的体验优化做很多文章...

2.冷启动为什么会有一段白屏

  1. 系统本身加载带来的耗时

  2. Application初始化工作.其实上面已经说了,当应用冷启动的时候Application先做初始化工作,导致了SplashActivity无法及时初始化,也就没东西显示出来.

  3. SplashActivity的OnCreate中存在耗时操作,或者布局过于复杂导致布局解析耗时过久.

3.解决办法

  1. 优化Application中的逻辑.使用异步加快进入SplashActivity,用事务总线(Eventbus,otto)延迟加载.

  2. 使用异步处理SplashActivity的OnCreate中的逻辑

  3. 但是这种处理其实还是会有一小段白屏或者黑屏,这是系统本身初始化工作导致的,无法避免...那么为什么QQ,微信不会呢?

这时候我们只需要给启动页添加一个主题Theme

<style name="StartAppTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowFullscreen">true</item>    //设置满屏,没有状态栏,不需要可去掉
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/ic_welcome</item>  //设置欢迎页图片
        <item name="android:windowContentOverlay">@null</item>
</style>
 <activity
            android:name=".activity.WelcomeActivity"
            android:theme="@style/StartAppTheme"          //就是上面那个主题
            >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
上一篇 下一篇

猜你喜欢

热点阅读