这个问题以前也注意过,但是因为现在项目中启动页一般都设置为了透明背景,所以没去在意
然后就去细究了自己的应用为啥没有白屏,才发现是因为启动页设置了透明背景主题,这确实解决了黑屏或者白屏的问题,但是却没有解决冷启动的等待时长问题,也就是启动慢
这有一篇分析和解决此问题的文章
看起来确实是解决了,然后又看到了一篇文章
如果单纯的只是将启动页的背景设置为一张图片,会造成内存问题,这当然是不允许的。不过上面文章中的第三种方法其实也没有完全解决问题,至于时间有没有缩短这里也不去验证了
那该怎么做,我们现在知道是,啥也不干的时候,会出现白屏或者黑屏,这时候我们可以通过设置启动页的背景来解决这个问题,而设置透明背景治标不治本,可以利用设置背景颜色或者图片背景来实现秒开,但这样又会出现内存问题,所以如果我们在启动页关闭的时候释放这个背景所占用的内存呢?
综上总结方案
设置背景主题
1
2
3
4
5<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/splash</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowFullscreen">true</item>
</style>在 AndroidManifest.xml 中给 SplashActivity 设置主题
1
2
3
4
5
6
7
8<activity
android:name=".ui.activity.SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>如需必要,可以注释掉 SplashActivity 中 oncreate() 方法里头的 setContentView() 方法,这个看需求
在 SplashActivity 生命周期结束的时候,释放掉 style中 android:windowBackground 的图片
1
2
3
4
5override fun onDestroy() {
super.onDestroy()
window.setBackgroundDrawable(null)
}
OK,以此记录