Android性能优化——App启动优化

要对App进行启动优化,需要了解几个概念。

  • 冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化 Application 类,再创建和初始化 MainActivity 类,最后显示在界面上。
  • 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。热启动因为会从已有的进程中来启动,所以热启动就不会走 Application 这步了,而是直接走 MainActivity,所以热启动的过程不必创建和初始化 Application,因为一个应用从新进程的创建到进程的销毁,Application 只会初始化一次。

  • 首次启动:首次启动严格来说也是冷启动,之所以把首次启动单独列出来,一般来说,首次启动时间会比非首次启动要久,首次启动会做一些系统初始化工作,如缓存目录的生产,数据库的建立,SharedPreference的初始化,如果存在多 dex 和插件的情况下,首次启动会有一些特殊需要处理的逻辑,而且对启动速度有很大的影响,所以首次启动的速度非常重要,毕竟影响用户对 App 的第一映像。

查看启动时间

  • log日志里,正则过滤出Displayed,需要在NoFilters下


    image.png
  • 命令行直接启动

adb shell am start -W lilun.com.pensionlife/.ui.welcome.SplashActivity
//adb shell dumpsys activity activities  获取当前界面的activity名
Android性能优化——App启动优化_第1张图片
image.png

上图中注意三个时间ThisTime、 TotalTime、 WaitTime,该次为冷启动,热启动只有60+ms;
简单地说
● ThisTime: 最后一个启动的Activity的启动耗时
● TotalTime: 自己的所有Activity的启动耗时
● WaitTime: ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)

可以从源码里frameworks\base\cmds\am\src\com\android\commands\am\Am.java文件中查看到上面时间的计算方法;

启动优化

启动优化主要是指冷启动的优化,冷启动原理有时间再分析;通常在从Launcher界面点击App图标到显示黑白屏之前的这段时间是不可优化的。
通过一些小技巧来对冷启动时间进行优化,从而让你app加载变得”快“一些(视觉体验上的快)。
比如启动黑白屏的问题;
再比如在Application的onCreate里面进行过多的初始化;

  • 出现黑白屏的原因及解决方法
    http://www.cnblogs.com/sunzn/p/3407078.html

  • Application的onCreate里面进行过多的初始化
    通过以下几个方面:延迟初始化、后台任务、界面预加载,减少应用启动时的耗时;

下面onCreate里分析各个初始化函数的耗时,通过trace文件;

  File file = new File(Environment.getExternalStorageDirectory(), "app");
  Log.i("App", file.getAbsolutePath());
  Debug.startMethodTracing(file.getAbsolutePath());
    ... //此处即为初始化代码
  Debug.stopMethodTracing();

当上段文件运行之后,会在getAbsolutePath()目录下生成app.trace文件。
通过adb pull 命令将其取出至电脑中


image.png

将此文件拖入Android Stdio中,从中查看比较耗时的操作,看能否优化。


Android性能优化——App启动优化_第2张图片
image.png

你可能感兴趣的:(Android性能优化——App启动优化)