闪屏页,咱们手机上的每一个 APP 几乎都有本身的闪屏页,就是在真正进入程序前,会有一个页面停顿几秒钟。其实咱们彻底能够充分利用好这几秒钟作不少的程序初始化了启动。 java
有时候咱们会发现,咱们在启动咱们本身的 APP 的时候,老是有那么点时间是白屏(黑屏),通过了白屏(黑屏)后才会进入咱们的 APP。那么这是为何呢?android
下面咱们模拟一下白屏的效果 ide
能够看到打开 APP 的时候会有白屏的现象出现,固然个人这个演示 APP 程序没有那么复杂,所以我为了实现这种效果,就在 Application 中作了个睡眠。布局
@Override
public void onCreate() {
super.onCreate();
myApplication = this;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
复制代码
这样就是出现了这种白屏的效果,由此能够得出结论,若是程序很复杂,而且有不少的初始化放到了 Application 中去完成了,那么这个时候刚打开程序的时候就会有个耗时,就会出现白屏的效果。this
因此这里程序加载有个顺序,当打开一个 Activity 的时候,而且这个 Activity 所属的 Application 尚未运行,系统会首先为这个 Activity 建立一个进程,建立进程的时候就会调用 Application 的 onCreate 方法。进程的建立和 onCreate 内部的初始化是须要时间的,若是这个时候过长,没有任何反应的话,那么对于用户来讲是不不知道的,用户还觉得本身没有点到呢,因此很显然是不可能在原页面等待加载的,那么这个时候就有了 StartingWindow(PerviewWindow)的出现,StartingWindow
出如今应用程序进程建立而且初始化完成以前,是个临时的窗口,对应的 WindowType
是 TYPE_APPLICATION_STARTING
做用就是告诉用户,系统已经收到咱们的操做了,正在对程序进行初始化,只要初始化完毕后就会移除这个窗口。spa
因此其实咱们看到的白屏或者黑屏就是 StartingWindow
,那么为何是白色或者黑色呢?咱们通常都会给咱们的 Application 和 Activity 设置 Theme,系统就会根据咱们所设置的 Theme 来决定 StartingWindow 的颜色。咱们都知道 Window 布局的顶层是 DecorView,而 StaringWindow 显示的是一个空的 DecorView,只是这个 DecorView 会应用咱们的这个 Activity 所指定的 Theme。咱们默认的 Theme 是 @android:style/Theme.Light
的话,这个时候就会产生白屏了。黑屏就是应用了 @android:style/Theme.Black
,好了到这里咱们就完全明白为何会出现白屏或者黑屏了。再顺便说一下 Activity 布局的绘制顺序:.net
经过上面咱们已经知道为何会出现这个问题了,那么解决起来就很简单了,只须要给启动页的样式添加一个背景就能够了,这样就达到了秒开的效果了!3d
<style name = "SplashThem" parent = "AppTheme"> <item name = "android:windowBackground">@drawble/splash</item> <item name = "android:windwoFullscreen">true</item> </style>
设置的这个背景要和个人启动页搭配起来就好了!
复制代码
参考:blog.csdn.net/yanzhenjie1…code