应用启动速度优化

应用启动速度优化一般可以有以下几种方式:

  • 启动页优化
  • 第三方库懒加载
  • MultiDex优化: 介绍了两种方式,一种是直接在闪屏页开个子线程去加载dex,难维护,不推荐;一种是今日头条的方案,在单独一个进程加载dex,加载完主进程再继续。
  • webview优化
  • 线程优化
  • 快速启动Activity的方式:预创建Activity,预加载数据。

1.启动页优化

          消除启动时的白屏/黑屏,市面上大部分App都采用了这种方法,非常简单,是一个障眼法,不会缩短实际冷启动时间,简单贴下实现方式吧。

启动页设置这个主题,或者全局给Application设置


            
                

                
            

这样的话启动Activity之后背景会一直在,所以在Activity的onCreate方法中切换成正常主题

protected void onCreate(@Nullable Bundle savedInstanceState) {
    setTheme(R.style.AppTheme); //切换正常主题
    super.onCreate(savedInstanceState);
}

这样打开桌面图标会马上显示logo,不会出现黑/白屏,直到Activity启动完成,替换主题,logo消失,但是总的启动时间并没有改变。

2.第三方库懒加载      

很多第三方开源库都说在Application中进行初始化,十几个开源库都放在Application中,肯定对冷启动会有影响,所以可以考虑按需初始化,例如Glide,可以放在自己封装的图片加载类中,调用到再初始化,其它库也是同理,让Application变得更轻。

3.MultiDex优化

方案1:直接在闪屏页开个子线程去执行MultiDex逻辑,MultiDex不影响冷启动速度,但是难维护。

方案2:今日头条的MultiDex优化方案:

  1. 在Application 的attachBaseContext 方法里,启动另一个进程的LoadDexActivity去异步执行MultiDex逻辑,显示Loading。
  2. 然后主进程Application进入while循环,不断检测MultiDex操作是否完成
  3. MultiDex执行完之后主进程Application继续走,ContentProvider初始化和Application onCreate方法,也就是执行主进程正常的逻辑。

4.webview优化

  • WebView第一次创建比较耗时,首次创建WebView耗时大约需要500ms左右,第二次创建耗时大约需要20ms左右,可以预先创建WebView,提前将其内核初始化。
  • 使用WebView缓存池,用到WebView的地方都从缓存池取,缓存池中没有缓存再创建,注意内存泄漏问题。
  • 本地预置html和css,WebView创建的时候先预加载本地html,之后通过js脚本填充内容部分。

5.线程优化

            线程是程序运行的基本单位,线程的频繁创建是耗性能的,所以大家应该都会用线程池。单个cpu情况下,即使是开多个线程,同时也只有一个线程可以工作,所以线程池的大小要根据cpu个数来确定。

 

 

 

 

你可能感兴趣的:(性能优化篇,启动优化,冷启动)