Android 开机启动慢的原因分析

  次阅读 作者:智能小宝 来源:互联网 2016-01-19 12:19 我要评论(0)

开机启动花了40多秒,正常开机只需要28秒就能开机起来。

内核的启动我没有去分析,另一个同事分析的。我主要是分析从SystemServer启来到开机动画结束显示解锁界面的这段时间,也就是开机动 画的第三个动画开始到结束这段时间,这是个比较耗时阶段,一般都在17秒左右(见过牛B的手机,只需5秒)。

SystemServer分两步执行:init1和init2。init1主要是初始化native的服务,代码在 system_init.cpp的system_init,初始化了SurfaceFlinger和SensorService这两个native的服 务。init2启动的是java的服务,比如ActivityManagerService、WindowManagerService、 PackageManagerService等,在这个过程中PackageManagerService用的时间最长,因为 PackageManagerService会去扫描特定目录下的jar包和apk文件。

在开机时间需要40多秒的时,从Log上可以看到,从SurfaceFlinger初始化到动画结束,要27秒左右的时间,即从 SurfaceFlinger::init的LOGI("SurfaceFlinger is starting")这句Log到void SurfaceFlinger::bootFinished()的LOGI("Boot is finished (%ld ms)", long(ns2ms(duration)) ),需要27秒左右的时间,这显然是太长了,但到底是慢在哪了呢?应该在个中间的点,二分一下,于是想到了以启动服务前后作为分隔:是服务启动慢了,还是 在服务启动后的这段时间慢?以ActivityManagerService的Slog.i(TAG, "System now ready")的这句Log为分割点,对比了一下,在从SurfaceFlinger is starting到System now ready多了7秒左右的时间,这说明SystemServer在init1和init2过程中启动慢了,通过排查,发现在init1启动的时候,花了7 秒多的时间,也就是system_init的LOGI("Entered system_init()")到LOGI("System server: starting Android runtime.n")这段时间用了7秒多,而正常情况是400毫秒便可以初始化完,通过添加Log看到,在SensorService启动时,用了比较 长的时间。

不断的添加Log发现,在启动SensorService时候,关闭设备文件变慢了,每次关闭一个/dev/input/下的设备文件需要 100ms左右,而SensorService有60~70次的关闭文件,大概有7s左右的时间。

调用流程是:

frameworks/base/cmds/system_server/library/system_init.cpp: system_init->SensorService::instantiate

frameworks/native/services/sensorservice/SensorService.cpp: void SensorService::onFirstRef()->SensorDevice& dev(SensorDevice::getInstance())

hardware/libsensors/SensorDevice.cpp: SensorDevice::SensorDevice()->sensors_open

hardware/libsensors/sensors.cpp: open_sensors->sensors_poll_context_t

sensors_poll_context_t执行打开每个传感器设备时,遍历/dev/input/目录下的设备文件,以匹配当前需要打开的 设备,遍历文件是在

hardware/libsensors/SensorBase.cpp的openInput下实现,如果打开的设备文件不是正在打开的设备文 件,会执行下面语句的else部分:

if (!strcmp(name, inputName)) {

strcpy(input_name, filename);

break;

} else {

close(fd);

fd = -1;

}

close每次需要100ms左右,每次打开传感器部分都执行去这样的操作,导致了在这有大概7s左右的延迟。

优化完这段时间后,系统启动变快了7秒,但还是慢,因为对比可以发现:

开机28秒:

04-16 16:14:22.205 140 343 I SurfaceFlinger: Using composer version 1.0

04-16 16:14:34.167 527 542 I ActivityManager: System now ready

04-16 16:14:39.089 140 605 I SurfaceFlinger: Boot is finished (16985 ms)

开机34秒:

04-18 15:32:55.565 I/SurfaceFlinger( 242): SurfaceFlinger is starting

04-18 15:33:05.214 I/ActivityManager( 622): System now ready

04-18 15:33:17.658 I/SurfaceFlinger( 242): Boot is finished (22091 ms)

可见还是慢了6秒。但这6秒慢在了似乎是在服务启动后的时间,这个时候比较难分析了,原因是这是所有的服务起来了,而且发出了 bootcomplete广播,应用也开始起来,但还没用解锁,开始以为是Launcher起来慢了,但换了一个Google原始的Launcher进 去,并没有变快。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...