前言:提到Android应用启动时白屏问题,应该很多人都有遇到过,不过由于我们一般的小公司做的应用都不在在乎这个问题,一般也不去管它,只要应用内容没有问题,一切就OK了,但是避免不了有时在面试时有问到这个问题,之前我也是一脸懵逼,不懂,不会,,,,现在慢慢的去了解这个了,能通过我们的方式去进一步处理白屏问题,同时在App启动时进行一些优化,让你的App启动速度更快一些,今天就跟大家聊聊我的解决方案,其实很简单,其它的大型App也有类似的解决方法。
1、小伙伴们现在拿起你们的安卓手机,随便打开一个你自己写的应用App,不要打开大型公司的App,就打开你自己写的,不管是测试的,还是公司的项目,然后点击图标启动,看一下,是不是会出现下面这种点击之后会先出现短暂的白屏,然后才看到你的启动图片,在进入项目中,
注意到了吗?短暂的白屏,这个问题是在哪里呢?
大家请打开你的App项目,或者新建项目中查看res-->values-->styles.xml中有这样的默认主题:
这个主题有一个parent ,一般如果我默认这样洗的话,启动会出现白屏,如果把这个parent去掉,则会出现黑屏,
大家可以一路去点这个parent,去查看他们的父级parent ,一直点一直看他们有没有parent,直到那个没有parent时 ,可以看到这个:
如果这个时候我们在点这个资源drawable,可以看到下面这个:
看到了没?默认的白色,知道了吧?白屏就在这里,不过我们可以修改它的颜色,
现在我们回到开始的style位置,在style中重新定义这个windowBackground,就能修改颜色,
eg:
这里我修改成蓝色,在此启动时,白屏就变化蓝屏了,找到原因了吗?
2、伪解决方案:
那一般都应该怎么解决呢?一些小伙伴应该都知道怎么处理了吧?我们可以稍微注意下京东,天猫等他们是怎么处理呢?他们可很会利用这个白屏时间,把这里修改为一张广告图片,比如:@drawable/image.png ,这样在启动就变了,,
是不是能解决这个问题?那还有没有其它发方法呢?有,
我们这里不加任何颜色,也不加图片,直接设置为空,同样的位置上,这样写:@null , 这样在其启动,你会发现那个白屏就不见了,但是同时用心的朋友会发现,当你点击应用图标时,它并不会立刻进入App,会有短暂的等待才进入App里面,这是为什么呢?
原因:因为我们上面虽然把白屏颜色置空了,但是并不能真的去掉这个白屏问题,只是让你看不见,它在启动时任然还需要花费同等的时间才会进去你的App,这么说是不是能明白了?
电商的App他们都是利用这个白屏时间加载一张广告图片,不同时间加载都会有不同图片。
3、另一种方案:
我们可以在style中单独写一个style,如:
<style name="AppTheme.Launcher1">
<item name="android:windowBackground">@null</item>
<item name="android:windowDisablePreview">true</item>
</style>
然后在你项目启动的第一个activity的onCreate()方法中加上如下代码:
setTheme(R.style.AppTheme_Launcher1);
在你的Mainifest.xml中也要把这个主题加上,就可以了。这也是一种方案。
好了这里就简单介绍这个启动白屏的最简单的解决方案。