解决 APP启动白屏黑屏问题

0
回复
151
查看
[复制链接]

10

主题

165

帖子

2892

安币

Android大神

Rank: 6Rank: 6

发表于 2019-5-23 18:00:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-939233-80123.html

### 闪屏页简介闪屏页,我们手机上的每个 APP 几乎都有自己的闪屏页,就是在真正进入程序前,会有一个页面停顿几秒钟。其实我们完全可以充分利用好这几秒钟做很多的程序初始化了启动。![图片描述](/data/attachment/album/201905/23/175733l39o9yys3tt7asmy.png)### 为什么我的 APP 启动会白屏或者黑屏有时候我们会发现,我们在启动我们自己的 APP 的时候,总是有那么点时间是白屏(黑屏),经过了白屏(黑屏)后才会进入我们的 APP。那么这是为什么呢?### 模拟效果下面我们模拟一下白屏的效果![20190522-splash开启.gif](ht://upload-images.jianshu.io/upload_images/6737388-dbf3378716f3da3e.gif?imageMogr2/auto-orient/strip)可以看到打开 APP 的时候会有白屏的现象出现,当然我的这个演示 APP 程序没有那么复杂,因此我为了实现这种效果,就在 Application 中做了个睡眠。```java    @Override    public void onCreate() {        super.onCreate();        myApplication = this;        try {            Thread.sleep(2000);        } catch (InterruptedException e) {            e.printStackTrace();        }    }```这样就是出现了这种白屏的效果,由此可以得出结论,如果程序很复杂,并且有很多的初始化放到了 Application 中去完成了,那么这个时候刚打开程序的时候就会有个耗时,就会出现白屏的效果。所以这里程序加载有个顺序,当打开一个 Activity 的时候,并且这个 Activity 所属的 Application 还没有运行,系统会首先为这个 Activity 创建一个进程,创建进程的时候就会调用 Application 的 onCreate 方法。进程的创建和 onCreate 内部的初始化是需要时间的,如果这个时候过长,没有任何反应的话,那么对于用户来说是不不知道的,用户还以为自己没有点到呢,所以很显然是不可能在原页面等待加载的,那么这个时候就有了 StartingWindow(PerviewWindow)的出现,`StartingWindow` 出现在应用程序进程创建并且初始化完成之前,是个临时的窗口,对应的 `WindowType`是 `TYPE_APPLICATION_STARTING` 作用就是告诉用户,系统已经收到我们的操作了,正在对程序进行初始化,只要初始化完毕后就会移除这个窗口。所以其实我们看到的白屏或者黑屏就是 `StartingWindow`,那么为什么是白色或者黑色呢?我们一般都会给我们的 Application 和 Activity 设置 Theme,系统就会根据我们所设置的 Theme 来决定 StartingWindow 的颜色。我们都知道 Window 布局的顶层是 DecorView,而 StaringWindow 显示的是一个空的 DecorView,只是这个 DecorView 会应用我们的这个 Activity 所指定的 Theme。我们默认的 Theme 是 `@android:style/Theme.Light` 的话,这个时候就会产生白屏了。黑屏就是应用了 `@android:style/Theme.Black`,好了到这里我们就彻底明白为什么会出现白屏或者黑屏了。再顺便说一下 Activity 布局的绘制顺序:1. 绘制背景2. 绘制 View 本身的内容3. 绘制子 View 4. 绘制修饰内容(例如滚动条)### 解决黑白屏问题通过上面我们已经知道为什么会出现这个问题了,那么解决起来就很简单了,只需要给启动页的样式添加一个背景就可以了,这样就达到了秒开的效果了!```xml        @drawble/splash  true设置的这个背景要和我的启动页搭配起来就行了!```![图片描述](/data/attachment/album/201905/23/175826tkczw4b4yfijjfe2.jpg)> 参考:https://blog.csdn.net/yanzhenjie1003/article/details/52201896  继续阅读全文



想在安卓巴士找到更多优质博文,可移步博客区

如果对本篇文章感兴趣,请前往,
原文地址:
http://www.apkbus.com/blog-939233-80123.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )