APP启动黑屏白屏原因与解决方式

我们在桌面启动自己辛苦创建的APP时,总是会看到黑屏或是白屏现象,这让人的体验感觉不是很好,看看大厂的APP为什么不会有这个现象题就要解决,即便不是BUG,用户体验一样很重要。

此文章已收入Android偶遇杂症合集(持续更新)

1. APP启动黑/白屏的原因

首先,我们需要知道一个APP启动时,屏幕上都会有什么。在我们的APP里,显示在屏幕上的自然是各个View了,而我们的View又都是在Activity的onCreate()方法中调用了setContentView()方法,传入了我们的layout文件,也就是我们理论上应该看到的Activity内容。但是Android系统在启动一个新的Activity时,首先进行的并不是绘制Activity的内容,我们来看看一个Activity的UI结构。

那么怎样可以拥有更好的用户体验呢候我们需要的是drawable。

3.2.1 drawable的类型

在Android中,我们可以使用xml自定义一个drawable,用的最多的场景就是背景图了,Android系统的一些默认图标也都是用xml实现的,当然那涉及到了一些矢量图的知识。

首先我们先了解一下drawable的类型,常见的几种有:、、、、、、、、、、、。

这里我采用了LayerDrawable来解决图片拉伸的问题,其他的drawable以后再写一篇文章专门分析各个drawable。

3.2.2 LayerDrawable解决图片拉伸

LayerDrawable为什么能解决图片拉伸问题呢从LayerDrawble的性质说起了:

  1. XML标签为layer-list

  2. 层次化的Drawable合集

  3. 可以包含多个item,每个item表示一个Drawable

  4. item中可以通过android:drawable直接引用资源

  5. item中可以通过android:top等指定相对于父节点的位置

多个Drawable的层次化叠加,并且可以指定每个Drawable的位置,是不是和layout很像简单的布局显示可以用LayerDrawble来完成,不过只能塞Drawable进去,文字什么的就不行了。

那么我们来看一下一个可以很好适配屏幕的背景图改如何完成。首先在drawable文件夹下建立一个layer-list类型的drawable文件bg_splash.xml,随后写入如下代码:

我们在layer-list中放入了两个item:第一个是一整个页面的背景,可以是图片,但是笔者建议用纯色的ShapeDrawable,一定程度上减少内存开销并且无需考虑图片失真之类的问题;第二个是一个Bitmap,这个标签是按照图片大小插入一张图片,这样避免了图片在屏幕上的拉伸,通过来指定这个item顶部的偏移距离,同样还可以指定、、来定位item的位置,随后对的设置为,让logo可以显示在顶部。这样一个能随着屏幕进行适配并且不会失真的背景就做好了,按照方法二设置为即可。

3.2.3 style主题优化

按照方法二的设定,整个App将使用我们制作的bg_splash作为背景,这时候如果不给每个Activity设置背景或者在使用虚拟键盘时,进入App之后屏幕上也会看到bg_splash出现在没有控件的位置,造成用户的疑惑或者反感。

我们知道Activity也是可以设置主题的,那么我们可以给Application设置一个默认的主题AppTheme,然后给SplashActivity设置我们的全屏带背景的主题SplashTheme,这样在我们的SplashActivity中就可以迅速显示启动背景图,进入App中,在其他Activity中也不会出现启动背景图,最终的styles和AndroidManifest文件如下:

完毕

今天的分享就到这里,文章多有不足,各位小伙伴有什么想法可以直接评论或是私信,要是对你有所帮助就给我一个赞吧,喜欢我的小伙伴可以关注我哦~

APP启动黑屏白屏原因与解决方式

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月26日
下一篇 2020年2月26日

相关推荐