文章目录

    • 一、android系统介绍
    • 二、 评估启动各个阶段的耗时情况

副标题:目前基于android8.0

一、android系统介绍

通过上一篇的开机速度的优化步骤,我们知道优化一个系统,首先需要了解这个系统是由哪些部分组成,启动流程是怎么样的。这部分内容,这里简单介绍下。
以下是android系统框图,通过这个图我们可以大概的清楚系统是有哪些部分组成的。 android开机启动时间优化:系统初步评估_第1张图片
(此图来自:developer.android.com)

Android系统的启动流程,简单理解的话就是:
硬件设备上电–>引导加载程序启动–>kernel启动–>第一个应用init启动–>Zgote启动–>SystemSever启动–>主界面(Launcher)。
当然这个启动流程是省略了很多重要部分,尤其是对于优化启动时间而言。

这里只作为初步评估系统时使用,以及对整个系统启动流程不熟悉的人,有个大体轮廓的了解,熟话说站的高看的远,才能事半功倍,对于不熟悉的代码,首先应该了解其框架是怎么样的,我们才能够有了继续深入的方向。
android开机启动时间优化:系统初步评估_第2张图片
(此流程图来自:https://www.cnblogs.com/blogs-of-lxl/p/11272756.html )

二、 评估启动各个阶段的耗时情况

通过串口工具和adb获取启动信息,如何(在不同的工作系统上)使用工具可以参考后续文章。
用到的工具:串口工具和adb。

2.1 底层部分
从串口信息开始:
在这里插入图片描述
android开机启动时间优化:系统初步评估_第3张图片
android开机启动时间优化:系统初步评估_第4张图片
通过类似上面的信息和时间戳,可以大概估计出

  • uboot 的启动时间:可以粗略的根据串口刚输出的时间戳到"Starting kernel …" 的差值,判断uboot启动时间;(如上图左边的红框)
    注意:如果主芯片是通过其他MCU供电的话,也需要关注下这段时间的耗时。
  • kernel镜像拷贝解压的时间: 可以根据"Starting kernel …"到 “Booting linux …”的时间差估算;
    注意:“Booting linux …”的时间戳, 并非kernel 实际启动时间,还包括了kernel初始化,直到串口初始完成,能够输出信息。
  • kernel启动的时间:可以根据第一条log到“Freeing unused …”的时间差来估算。

2.2 android系统用户空间部分

  1. bootchart 可以用来看启动耗时,但这个是kernel启动到android 系统属性boot_completed被设置为1时的时间差。
  2. 通过“adb logcat -b events -d >boot_events.txt” 可以抓取log,用来分析android用户空间的(相对于底层),各个阶段的耗时情况。
    通过过滤如下信息,判断各阶段耗时情况:
    android开机启动时间优化:系统初步评估_第5张图片
    参考:
    famework/base/services/core/java/com/android/server/am/EventLogTags.logtags
    famework/base/services/core/java/com/android/server/EventLogTags.logtags
    famework/base/services/core/java/com/android/server/EventLogTags.logtags

过滤出来的信息类似:
android开机启动时间优化:系统初步评估_第6张图片
通过log信息,根据上面表格,计算各个阶段的时间差值,得出每个阶段的耗时情况,比如apk扫描花了多少时间等等。
可以知道哪个阶段耗时占比大,优化空间在什么地方。

2.3 android系统完整启动时间
如上所述,结合串口信息和bootchart可以估计出,系统从bootloader(uboot)到android启动完成的时间。
也可以通过秒表或者拍视频等方式的计算,上电到可操作界面出来的时间。

这是整体的时间估算方式,优化中,我们还是需要更细节的、阶段性的耗时分析,可以通过一些调试方法,去进一步的分析,比如Kernel设置initcall_debug参数,分析kernel启动过程中各模块的耗时等等。

更多相关文章

  1. android图标适配、JPG、PNG、iOS消息推送及系统通知方式
  2. Android中的各类Span全面系统研究
  3. 诺基亚N900安装Android 2.2改版系统Nitdroid教程
  4. [置顶] Android开发:在onTouchEvent中处理任意时间的长按事件
  5. android客户端与服务器交互数据(基于SAOP协议的远程调用标准,通过w
  6. ANDROID音频系统散记之二 Android上的resample处理
  7. Android编译系统中头文件搜索路径顺序的一个问题
  8. Android 应用程序查找设备的方法——以串口为例

随机推荐

  1. android获取本地图片或拍照图片
  2. Android(安卓)模仿renren的左右划动菜单
  3. Android_Layout_xml布局
  4. Android下2d物理引擎Box2d用法简单实例
  5. 为开发人员准备的 10 个 Android(安卓)教
  6. iOS url 编码 解码
  7. 蓝牙API
  8. Android(安卓)RxJava使用介绍(三) RxJava的
  9. android flash air 打包工具
  10. Android-基本控件(五大布局 Layout)