Android冷启动白屏解决方案
2017-06-27 本文已影响580人
不灬语
1.什么是冷启动
冷启动其实就是应用第一次启动,或者说启动之后后台被杀掉了又重新启动app的情况.比如小米通过菜单键杀掉应用后台,重新启动app.
应用冷启动的时候其实会在Application做一些初始化工作,大部分第三方都是在Application初始化的.初始化完才会启动SplashActivity做初始化工作,然后才是进入MainActivity.这其中看起来很简单,其实可以对app的体验优化做很多文章...
2.冷启动为什么会有一段白屏
-
系统本身加载带来的耗时
-
Application初始化工作.其实上面已经说了,当应用冷启动的时候Application先做初始化工作,导致了SplashActivity无法及时初始化,也就没东西显示出来.
-
SplashActivity的OnCreate中存在耗时操作,或者布局过于复杂导致布局解析耗时过久.
3.解决办法
-
优化Application中的逻辑.使用异步加快进入SplashActivity,用事务总线(Eventbus,otto)延迟加载.
-
使用异步处理SplashActivity的OnCreate中的逻辑
-
但是这种处理其实还是会有一小段白屏或者黑屏,这是系统本身初始化工作导致的,无法避免...那么为什么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>