为什么Android启动相对这么慢?


8

这个问题令我(可能还有很多人)担心,因为我的手机没有旋转的部分。

我的手机具有四核,3 Gig RAM和如此大的存储空间,本质上都类似于SSD,具有惊人的读/写速度。

有了这些,Android(KitKat和Lollipop两者)都需要大约80秒钟才能启动完成。在使用systemd或upstart的Ubuntu上花费更少。(一些用户报告说,使用带有systemd的Ubuntu的启动时间不到10秒,而使用Upstart的启动时间不到20秒,而Intel i5和RAM为8 Gig等规格)

那么,是什么让Android启动如此缓慢呢?作为用户,我可以做些什么来加快启动过程吗?

编辑:根据解释的启动过程(https://android.stackexchange.com/a/29738/27870),与传统操作系统(如Ubuntu)相比,整个启动过程似乎没有太大差异。Android在此过程中哪里出错了。


1)您写的是规格,但没有写型号!2)您是否也在使用多个ROM?2)将台式机与移动设备的操作系统和硬件差异如此之大有什么意义?3)您当前使用的是哪个ROM和Android版本?4)您是否尝试过从启动中删除应用程序?5)您是否比较了新ROM和所有应用程序安装的ROM的启动时间差异?//我使用自动启动从启动中删除应用。
Firelord

许多人使用Xposed模块来完成这项工作。我想您需要Google这样的服务。可能有人可以提及他们。
Firelord

@Firelord我仅使用一个ROM。两者虽然都在台式机和手机上运行,​​但如果不相似,它们都依赖于相似的内核(只是针对不同的体系结构进行编译。)我目前使用的是5.1.1。自从4.0开始使用,启动速度从未增加。即使与安装完整应用程序时相比,新安装的启动速度也没有明显的时间差异。使用自动启动,手机启动速度有多快?顺便说一句,我正在使用xperia z2
KhoPhi,2015年

1
我的担忧是要处理更多现成的Android。太慢了 它的真正ARM并不接近PC上的处理器,但是如今大多数电话都具备这种速度,我预计启动时间会有所改善,但事实并非如此。ART旨在使运行的应用程序更快。谁的工作对一个能让启动更快的开箱即用的
KhoPhi 2015年

1
我不敢说这是ARM,因为我的基于ARM的老版本Chromebook立即启动,我的意思是从字面上讲。
rjt

Answers:


10

几年前,我以Android开发人员的身份从事Android启动时间优化。显然,作为这项工作的一部分,我们首先需要分析Android在引导过程中花费的时间。

以下是简要的发现:

使用的硬件OMAP3430 Board类似于在其上刷新了Stock Android的开发板。在实际的商业/生产设备上,将有其他特定的硬件。为了可视化启动时间,我们使用了一个开发工具bootchart

通过Android的大多数时间花费在以下2个方面:

  1. 合子过程。当Android OS启动时,它将启动Zygote进程,它会预加载类以为应用程序创建共享内存区域。加载Java类的工作需要@ 23秒才能完成。

为什么?因为zygote类预加载对于引导后系统的良好性能至关重要。因此,一旦所有应用程序都加载了类,那么应用程序的运行时间就会更快。

  1. 包管理器服务。 在logcat输出中,我们可以看到Package Manager扫描了4个目录。 /system/app/system/framework/data/app/data/app-private

接下来,有一个称为“活动管理器”的组件,它启动诸如定位服务,电话服务等各种服务。完成此过程大约需要1112秒

为什么?因为,程序包扫描理论上可以在首次引导后对其结果进行一些缓存,并且可以检查安全漏洞。

如果您将这2次相加,则约为35秒

在今天,您可能会忽略这些数字,但是这些数字指示的是Android AOSP代码在引导过程中花费的时间。OEM拥有一套自己的硬件,这些硬件因设备而异。

当然,在这两个耗时的步骤之后,Android还需要进行其他硬件和软件初始化,这可能会进一步延长启动时间。

作为用户,我可以做些什么来加快启动过程吗?

我猜不多。Android开发者社区和OEM仍在努力加快启动时间,但是正如您可能想象的那样,这并不是那么容易,并且更改以优化启动时间可能最终会导致正常运行期间的应用程序加载时间增加,正如Android框架所暗示的那样工程师


为什么合子过程映像没有像每个好的VM一样被缓存(如smalltalk和lisp)?为什么在电话API准备就绪之前无法显示Android GUI。为什么所有这些都是顺序的?为什么我们仍然使用JAVA。没有理由为什么Android的启动时间应该比C64的启动时间慢,这意味着1秒钟
Lothar

4

Android启动缓慢吗?

我的手机具有四核,3 Gig RAM ... Android(KitKat和Lollipop两者)都需要大约80秒才能启动完成。

我的手机只有1G RAM(Zenfone 4)的双核,而且我从来没有遇到这个问题。在约60秒的时间内完成冷启动,并以40-ish(CyannogenMod 12.1)重新启动。

一些用户报告使用Ubuntu和systemd的启动时间少于10秒,而大约20秒...

这取决于配置和您认为的“启动时间”。大约90秒后,我的笔记本电脑(i5第一代,带有旋转磁盘的4 GB RAM)被认为可以使用(完成引导)。当然,我可以延迟/禁用某些服务以获得更快的启动时间,并根据需要手动启动它们。但是,根据我的观点,基于我的偏爱,这将不算是可用的

在PC和手机上

一些 PC和移动Linux之间的比较时,你应该考虑差异。从CPU内核。最显着的差异:

  • 由于设备的特性,移动CPU 大多以节能为主要考虑因素。这极大地影响了性能。
  • Android内核具有一些特定于移动设备的功能,这些功能可能会影响启动时间和硬件I / O访问。
  • 此外,已知Android内核与主线/稳定器存在兼容性问题。这主要是由于供应商倾向于保留与设备驱动程序兼容的旧内核版本。AOSP棉花糖运行3.18.10时内核处于稳定状态4.6.2

那么,是什么让Android启动如此缓慢呢?

我们为什么不检查?:)

如果您有权访问adb并已启用Developer Options,请使用以下命令检查启动日志

adb logcat -d -b events -v threadtime | grep "boot"

在我的设备上,这是输出:

bambang@pamungkas ~ % adb logcat -d -b events -v threadtime | grep "boot"
06-08 04:35:01.417   193   193 I boot_progress_start: 9906
06-08 04:35:03.718   193   193 I boot_progress_preload_start: 12208
06-08 04:35:07.838   193   193 I boot_progress_preload_end: 16328
06-08 04:35:08.158   513   513 I boot_progress_system_run: 16647
06-08 04:35:09.880   513   513 I boot_progress_pms_start: 18370
06-08 04:35:10.204   513   513 I boot_progress_pms_system_scan_start: 18693
06-08 04:35:24.487   513   513 I boot_progress_pms_data_scan_start: 32977
06-08 04:35:28.552   513   513 I boot_progress_pms_scan_end: 37042
06-08 04:35:28.696   513   513 I boot_progress_pms_ready: 37186
06-08 04:35:33.088   513   513 I boot_progress_ams_ready: 41578
06-08 04:35:40.755   513   533 I boot_progress_enable_screen: 49244

如您所见,从VM启动到窗口管理器绘制初始屏幕的总启动时间约为40秒。不包括在固件和内核空间上的额外时间(在链接的服务器上,这相当于步骤1-4)。

请注意,处理整个系统的apkboot_progress_pms_*)大约需要18秒,这相当于启动时间的〜45%,其中包括:

  • 清理不存在的系统软件包和软件包的不完整安装,
  • 验证已安装的应用,
  • 设置库路径,
  • 等(请参阅:PackageManagerService的完整源代码)

因此,通常,总启动时间取决于设备上安装的软件包(应用程序)的数量。更多的应用程序意味着在pms过程中等待的时间更长。此外,启动活动大约需要5秒/启动时间的20%。如果没有系统行为的深入了解,其余的内容既不重要也不可以安全修改。

我有什么办法可以加快启动过程?

  • 尝试其他ROM。索尼是为调节员提供健康环境的“好人”之一。我建议使用AOSPCyanogen。请注意限制
  • 测试,不要假设!可以很容易地假设A启动慢,B启动快。像上面这样的简单logcat命令将揭示一些有用的信息,用于ROM之间的基本启动时间基准测试。
  • 如果您知道自己在做什么Embedded Linux Wiki会列出一些可能的调整以缩短启动时间。

关于改善启动时间

对你的评论

ART旨在使运行的应用程序更快。谁的工作对一个能让启动更快的开箱即用的

在我看来,调整启动时间既不必要,又提供了微不足道的收益。从理论上讲,由于您的电话会在大多数情况下保持开机状态;因此,保持系统稳定性(在较长的引导过程中进行权衡)对于确保更长的正常运行时间和更少的错误至关重要。


adb logcat -d -b events -v threadtime | grep "boot"返回空。我检查了重启,仍然没有匹配的日志boot
KhoPhi

@雷克斯福德:嗯,我的工作正常。您可以尝试将其通过管道传至寻呼机(例如:less),然后从那里搜索:adb logcat -d -b events -v threadtime | less。或修改logcat环形缓冲区
bangbambang

0

值得一提的是,我在Linux下的虚拟机中运行Android-x86,它的启动时间约为22秒,与大多数GNU / Linux发行版和Windows 10在具有四核台式机CPU的SSD驱动器上相当。

因此,我认为Android启动时间不会特别慢。


请记住,该问题是在2015
Andy Yan

我注意到了@AndyYan,但是Android-x86的版本要老得多。
Marc.2377

硬件规格在那里。在如此强大的硬件下(即使在VM效率下降之后),软件压力的影响也要小得多。
安迪(Andy Yan)

@AndyYan我同意...但是我的观点是,按照某些标准,Android并没有将它定义为缓慢的东西。也就是说,与其他成熟的操作系统相比,类似的硬件。我觉得这值得补充。
Marc.2377
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.