一般APP启动都会显示一个白屏或者黑屏的页面,再跳到欢迎页,这样子的体验效果不好。这到底是怎么回事呢?要如何解决它呢?今天我们来分析下它产生的原因,以及解决方案。
1、产生原因
当系统启动一个APP时,zygote进程首先会创建一个进程去执行这个APP,但是创建进程是需要时间的,用户点击后以为没响应会再次点击,这样的体验效果不佳。为了解决这种迷之尴尬,Android系统会根据你的manifest中设置的主体颜色来显示一个白屏或者黑屏,它的正式称呼是Preview window,即预览窗口。
2、解决方案
这个问题的本质是,虽然代码还没执行,但是配置文件被提前读取了,所以我们主要针对mainfest来解决这个问题,更准确的说,是主题配置文件。
(1)修改启动的Activity的主题
具体方法如下: style.xlm
<style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar"> <item name="android:windowBackground">@drawable/splash_icon</item> </style>
@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);
到此启动页黑白屏的问题可以交货咯~