通常APP启动都会显示一个白屏或者黑屏的页面,再跳到欢迎页,这样子的体验效果很差。这究竟是怎么回事呢?要如何解决它呢?今天咱们来分析下它产生的缘由,以及解决方案。html
一、产生缘由java
当系统启动一个APP时,zygote进程首先会建立一个进程去执行这个APP,可是建立进程是须要时间的,用户点击后觉得没响应会再次点击,这样的体验效果不佳。为了解决这种迷之尴尬,Android系统会根据你的manifest中设置的主体颜色来显示一个白屏或者黑屏,它的正式称呼是Preview window,即预览窗口。android
二、解决方案post
这个问题的本质是,虽然代码还没执行,可是配置文件被提早读取了,因此咱们主要针对mainfest来解决这个问题,更准确的说,是主题配置文件。优化
(1)修改启动的Activity的主题动画
具体方法以下: style.xlmcode
@drawable/splash_icon
一样将主题设置到启动的Activity的主题中,windowBackground就是即将展现的preview window。其中splash_icon能够是一整张图片,网上不少小伙伴也都是这么作的。
其实它也能够是一个能解析出图片资源的XML文件,好像只有layer-list这种能作获得,由于它可以将多个drawable叠加起来展现。
这样子就能够解决黑白屏的问题了。
(2)进一步优化:添加动画
通常咱们的APP启动后都会有欢迎页,而后再进入主页。按照上面的作法,会先显示图片,接着显示欢迎页,而后到主页,由图片到欢迎页的跳转过渡很突兀,强迫症分分钟不能忍呀~
因此咱们进行进一步的优化:添加动画。
实际上Preview window只能是静态图,展现不了动画。咱们的作法是在跳到欢迎页中实现动画,就是在Preview widow跳转到欢迎页时,先显示一个跟Preview window页面如出一辙的页面,让人以为好像没有切换似的,而后再慢慢切换到欢迎页。
这里有个小问题要注意下:咱们给Preview window设置的背景图若是不做处理,是会一直存在在内存中的,因此在进入欢迎页的onCreate中将背景图还原:
getWindow().setBackgroundDrawableResource(android.R.color.white);
到此启动页黑白屏的问题能够交货咯~htm