每日一篇学习博客——Android冷启动
什么是冷启动
简单来说就是APP的需要初始化启动,后台没有该应用的进程,直接点就是APP第一次打开、或者进程被杀死重新打开,这些启动都是需要重新创建Application实例——本人自己的理接(阔能很片面)
什么是热启动
当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,也就是直接从进程中启动,不需要重新创建Application,这个方式叫热启动。
冷启动的方式直接就造成的不好体验如下
- 响应慢 ,点击应用的icon不能瞬间打开应用,会出现短暂的白屏或者是黑屏;
- 用户体验很差,应用短暂的黑白屏现象直接让用户第一感觉就觉得不是很友好,卡顿的感觉,因为没有直接的提示或者过度,这一到两秒就显得很苍白;
先分析下冷启动的产生原因
首先冷启动是APP应用启动流程造成的,无可避免;只能尽可能的优化启动尽可能的缩短启动时间,其次就是做一些处理,优雅美观的实现过度.
白屏或者黑屏就是应用还没有加载道布局文件,显示得window窗口背景
先说说怎么处理白屏或者黑屏吧
- 瞒天过海之设置透明窗口背景:
style.xml设置(注意这里的AppTheme需要在``AndroidManifest.xml里引用):
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
- 设置一张背景图: 例如splash.png
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowBackground">>@mipmap/splash</item>
<item name="android:windowIsTranslucent">true</item>
</style>
对比两者:
1). 第一种: 给人很慢的感觉,大一点的APP甚至让用户觉得是不是手机卡了,反应慢.优点的话就是直接一次性当前页面全部加载出来.
2). 第二种:让白屏/黑屏能够通过展示启动的页面来过度,简单来说就是=====>优雅 ,现在很多应用都是这么处理的,但是这种方式会使你的App一直有这个图片背景在显示,不是我们想要的结果,所以我们在Activity中重写一个生命周期中界面加载完成后的回调方法,将背景颜色改为白色
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//修改背景为白色
getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
}
还阔以设置的style不全局引用,只在主要页面引用就行,比如MainActivity.
代码:
<style name="AppTheme.Launcher" parent="Theme.AppCompat.Light.DarkActionBar">
<!--设置背景图-->
<item name="android:windowBackground">>@mipmap/splash</item>
<!--设置透明-->
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
然后继续操作上面的背景图修改为白色的操作就行!
3. 建议还是做一个欢迎页比较好,能有效的避免白屏问题还能做广告,这个页面的操作很少,还阔以设置跳转时间,提供充足的时间满足耗时操作,具体操作代码我写个了个小demo可以参考下.。很多大一点的应用都是有自己的欢迎页,以及自己定义的背景图来过度
SplashActivity——启动页
public class SplshActivity extends AppCompatActivity implements