转自:https://my.oschina.net/learnbo/blog/789645并表示感谢!

这里所说的统计系统的启动时间,并不是简单地用秒表和肉眼来统计,而是通过分析系统输出的log信息来统计,这样才显得更加专业。

首先了解2个概念:

(1)Android是基于Linux内核的系统,因此Android的启动过程是分为两个阶段的,第一个阶段就是Linux内核的启动,第二个阶段就是Android框架的启动(包括核心服务和程序)。

(2)Android的log系统是独立于Linux内核的log系统的。Linux内核通过printk打印的log信息,这些log写入到了/dev/kmsg文件中,在Shell终端可以通过dmesg命令查看这些log信息。Android框架则是通过Logger驱动打印log信息,这些log并没有归并到kmesg文件中,而是单独存储的,位于/dev/log目录下,在Shell终端可以通过logcat命令来查看。

下面我们分别从两种log信息中找到如何统计系统启动时间的方法。

1.  通过dmesg信息统计系统启动时间

首先,我们通过dmesg命令抓取Linux内核的log信息(部分系统可能需要先执行 adb root):

$ adb shell dmesg > dmesg.txt

Linux内核启动完成,一般都有如下的标准输出信息:

<6> [ 6.613861] Freeing init memory: 176K

因此,只要我们在dmesg.txt文件中找到“Freeing init memory”这一行即可,从上面的log可以看出,Linux内核启动只用了6.613861s。

那么,如何找到Android系统启动完成的标志呢?

很多Android设备在系统启动完成后,会在内核log中打印如下信息:

<6>[ 29.913726] init: processing action 0x96bb8 (property:sys.boot_completed=1)

因此,找到“boot_completed”这一行也就得到了整个系统的启动时间了,从这一行可以看出,整个系统启动用了29.913726s。

当然,并不是所有的Android设备都会打印出这条log,因此,我们一般用下面介绍的方法来专门统计Android系统的启动时间,

2.  通过logcat统计系统的启动时间

文章开头我们已经介绍过,Android的log系统是独立于Linux内核log系统的,通过在终端输入adb shell 进入Android系统,cd到/dev/log目录,你会发现里面有四个文件,分别是:events,main,radio,system.

Android系统把Log分为了四类,不同的类别记录不同的Log信息:

main - 主要的Log信息,大部分应用级别的Log信息都在这里

events - 系统事件相关的Log信息

radio   - 无线/电话相关的Log信息

system - 低级别的系统调试Log信息

默认通过logcat抓取的是main信息,如果想抓取指定类别的log信息的方法,在logcat命令后加-b参数,例如:

1

2

3

4

$ adb logcat -d -v time-b "main">  main.txt

$ adb logcat -d -v time-b "events">  events.txt

$ adb logcat -d -v time-b "system">  system.txt

$ adb logcat -d -v time-b "radio">  radio.txt

关于Android Log系统的分类,你可以访问如下页面详细了解:《Android Logging System》

那么,如何统计Android系统的启动时间呢?

我们可以重点关注events类别的log信息,通过如下命令:

$ adb logcat -d -b events | grep "boot"

如图所示,这是我在高通的APQ8064开发板上抓取的log信息:

“boot_progress_start”代表着Android屏幕点亮,开始显示启动动画,即15.492s开始闪烁Android字样。

“boot_progress_enable_screen”代表着整个系统启动结束,即用了29.986s,用这个总时间减去Linux Kernel的启动时间即可得到Android OS部分的时间。

更多相关文章

  1. Android(安卓)如何将定制的Launcher成为系统中唯一的Launcher
  2. android 学习笔记一
  3. android中能不能new Activity()对象引发的思考
  4. 【2017年学习输出内容记录】Android系统启动流程-Android的Init
  5. Android(安卓)Telephony启动过程源码分析
  6. Android(安卓)8.0 学习(4)---Android通用内核
  7. 让你自己写的Android的Launcher成为系统中第一个启动的,也是唯一
  8. 站在大神的肩膀上 - 简述Android应用启动流程
  9. 详解 Android(安卓)是如何启动的

随机推荐

  1. 游戏如何P改身份證信息头像和内容
  2. JavaScript实现飞舞的气泡效果实例
  3. “干掉实体店”后,电商为何又要从线上走回
  4. 群晖NAS设置IPV6公网访问
  5. fastadmin 查询 selectpage 数据
  6. Surface Flinger boot flow in Android(
  7. Android(安卓)透明背景的dialog
  8. Android(安卓)源码编译
  9. LinearLayout(线性布局)
  10. android实践项目八做一个下载读条