解决Android应用启动时的黑白屏问题

来源:互联网 发布:mac双系统开机选择切换 编辑:程序博客网 时间:2024/04/29 07:43

公司做的一款APP,在启动的时候,会先白屏一会再显示启动页的内容,给人的体验很不好。所以,决定查找一下白屏的原因优化一下视觉体验。

在度娘上搜索这个问题,确实很多同行都遇到了,并且都根据自己的理解给出了自己的解决之道。我经过实验之后,也确实解决了问题,在这里就总结一下,免得过几天就不认识了(这里确实想提一下,我看过几本技术书,也看了一些Android Framework源代码、技术博客、小例子。但是,由于自己急功近利,懒于实践,没有及时记录总结,刚过不久想用时却忘记了,血的教训啊)

学习的几个链接:

  • http://www.cnblogs.com/liqw/p/4263418.html
  • http://www.tuicool.com/articles/y2AVnu
  • http://chuansong.me/n/512323251074

    注:感谢写这些文章的同行,谢谢!

白屏原因

对于一款APP,我们都会对整个应用设置一个主题(AndroidManifest.xml文件中标签application设置属性android:theme=”@style/AppTheme”),而这个主题呢,一般都是继承自系统的一个已有主题(例如:Theme.AppCompat.Light.NoActionBar),而启动窗口根据这个主题设置样式的时候,会根据主题中的属性android:windowBackground设置窗口的背景颜色。

好了,总的过程就是,第一显示主题的背景色即白色,第二程序运行完setContentView()方法之后把启动页视图添加到DecorView上,第三通过一些操作显示到屏幕上之后,白屏消失,显示我们的启动页视图。

解决方案一

简单粗暴,为启动页专一设置一个主题,将这个主题的android:windowIsTranslucent属性设置为true即可。
这样就可以了吗?严格来说,不可以,因为这样就是将主题的默认背景设置为透明的了,所以看到的还是Home页,在显示透明之后才显示启动页,大家会觉得点击APP的图标之后过了一段时间才显示启动页视图。

缺点,方应迟钝。不过,确实达到了不显示白屏的目的。

解决方案二

对于有些应用,启动页仅仅是一张图片,这也很容易办。同样为启动页专一设置一个新的主题,设置主题的android:windowBackground属性为启动页背景图即可。

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

为了减小APK的大小,可以尝试使用.9图。

优点:避免了反应迟钝的问题。

解决方案三

可以使用layer-list制作一张图片launcher_layer.xml,将其设置为启动页专一主题的背景,并将其设置为启动页布局的背景。
优点:对于启动页布局简单,可以使用layer-list实现的采用这种方式比较好,启动迅速,主题背景和启动页布局背景相同体验流畅。

总结

大家选择方案时,可以根据自己启动页的布局特点选择合适的。为了美观,大家可以把启动页设置为全屏。

赞助

本文由老司机学院动脑学院特约赞助。

做一家受人尊敬的企业,做一位令人尊敬的老师

1 0