App冷启动与启动白屏处理

近日在开发过程中,发现每次点击app从桌面启动都有一个在桌面明显的等待时间,机型越低端的越明显,冷启动优化看来已经势在必行,所以怒而一顿研究再解决之。

冷启动

  • 第一次启动、被用户杀死进程或系统自动回收进程后,整个app后台任务被清理,再次启动app,称为 冷启动
  • 特点:后台任务全部结束,回收进程

热启动

  • 用户点击返回键退回界面,后台任务没有杀死,再次点击启动app,称为 热启动
  • 特点:未清理后台任务,再次启动

为什么会出现白屏?

  • 在一个Activity打开时,如果该Activity所属的Application还没有启动,系统会为这个Activity创建一个进程;
  • 每创建一个进程,都会执行一次Application的onCreate()方法;
  • Application的onCreate方法执行完后,启动的Activity的onCreate方法才会开始执行;
  • 在Application的onCreate方法中执行耗时间的操作,就会出现白屏。

如何避免

  1. 尽量不让Application参与业务操作;
  2. 不在Application的onCreate中执行耗时任务 比如:创建文件等IO操作,应在使用时再创建;
  3. 不以静态变量的的方式在Application中保存数据。

白屏如何解决?

大致有以下三种方法:

  • 使用IntentService实现异步处理耗时的操作;
  • 将背景图设置成我们APP的Logo图,作为APP启动的引导,现在市面上大部分的APP也是这么做的
  • 将背景颜色设置为透明色,在启动页出现前屏幕一直显示桌面

推荐使用第一种解决方法,当然,三个方法结合使用效果更好

举例

普通处理

App冷启动与启动白屏处理

耗时长:
App冷启动与启动白屏处理

IntentService处理

App冷启动与启动白屏处理
耗时长:
App冷启动与启动白屏处理