Android App 冷启动优化方案--黑白屏

每日一言:没有热忱,世间便无进步。

欢迎一起讨论和学习,QQ:732258496  QQ群:478720016

一.抛出问题

     关于android app启动页白屏黑屏和手机启动页图片跳跃闪屏的问题。

二.产生原因

  • 白屏或黑屏,具体是哪一个,取决于appTheme使用的是dark还是light主题

  • Android Studio 引起的白屏

    2.x时代的AS开启了instant run以后可能会导致白屏,但实际完整的apk包不会出现此问题

  • 冷启动引起的白屏/黑屏

    点击你app那一刻到系统调用Activity.onCreate()之间的时间段。在这个时间段内,WindowManager会先加载app主题样式中的windowBackground作为app的预览元素,然后再真正去加载activitylayout布局

  • 暖启动/热启动引起的白屏/黑屏

    这点在配置较好,内存空间充足的手机上不是很明显,但低端手机或者内存吃紧的情况下依旧会出现”闪屏”效果,持续时间很短,一闪而过

 

三.最优解决发方式(经多种方法对比得出)

     关键代码:true

 
   
    
 

四.APP启动优化汇总

    1.启动方式

       (1) 冷启动:当启动应用时,后台没有该应用的进程(常见如:进程被杀、首次启动等),这时系统会重新创建一个新的进程分配给该应用

       (2) 暖启动:当启动应用时,后台已有该应用的进程(常见如:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用

       (3) 热启动:相比暖启动,热启动时应用做的工作更少,启动时间更短。热启动产生的场景很多,常见如:用户使用返回键退出应用,然后马上又重新启动应用

        热启动和暖启动因为会从已有的进程中来启动,不会再创建和初始化Application

   2.优化

       我将冷启动优化分为可控阶段和不可控阶段

  • 不可控阶段

    点击app以后到初始化Application之间这段时间,系统接管,从Zygote进程中fork创建新进程,GC回收等等一系列操作,和我们app无关

  • 可控阶段

    初始化Application开始,如下图

    Android App 冷启动优化方案--黑白屏_第1张图片

    从上图可以看到,整个冷启动流程中至少有两处onCreate,分别是ApplicationActivity,整个流程都是可控的。所以,onCreate方法做的事情越多,冷启动消耗的时间越长

   3.优化方案(仅针对可控范围)

  • 从启动流程分析

    减少两处onCreate()中的初始化操作,将部分初始化移动到IntentService中进行

  • 从用户体验分析

    app首页的按返回键响应修改为响应Home键,曲线救国。让用户以为app确实退出了,但是实际上是点了Home键。如此一来,下次点击app图标的时候,直接唤起,不需要进行初始化操作,主要可以避免再次走闪屏页,参考美团,微信,QQ,淘宝等(实现的效果一样,但是实现方式就不得而知了)

    • 微博:启动后点击返回键和Home键的操作一样,底部选中tab没有做自切换
    • 美团:启动后点击返回键和Home键的操作不一样,底部选中tab做了自切换
    • QQ:同微博
    • 淘宝:启动后在首页按返回键,会先回到第一个tab,然后再退出

4.总结

  • 白屏/黑屏界面使用图片替换
  • onCreate中尽量避免做过多的初始化动作,如果必须,那么考虑IntentService
  • 首页中对BackHome键的动作做一些假象,使用户按Back键时以为他退出了,以减少下次启动的不必要动作(建议:非即时消息类和社交类app,这种做法慎用,因为可能有流氓之嫌。。。(逃)
  • Activity#moveTaskToBack(true)

你可能感兴趣的:(Android)