Androidの起動が比較的遅いのはなぜですか?


8

私の電話には回転部分がないので、この質問は私(そしておそらくそこにいる多くの人)にとって関心事です。

私の電話にはクアッドコア、3ギガのRAM、そして非常に多くのストレージスペースがあり、すべてSSDのような性質を持ち、驚異的な読み取り/書き込み速度を備えています。

これらすべてにより、Android(KitKatとLollipopの両方)が完了するまでに約80秒かかります。Ubuntuでは、systemdまたはupstartを使用することで、処理が大幅に短縮されます。(一部のユーザーは、Ubuntuをsystemdで使用した場合の起動時間が10秒未満であり、Upstartを使用した場合、Intel i5や8 GigのRAMなどの仕様で約20秒と報告しています)

では、Androidの起動が非常に遅くなるのはなぜですか?そして、ユーザーとして何かありますか?起動プロセスをスピードアップするために私は何ができますか?

編集:説明されているブートプロセス(https://android.stackexchange.com/a/29738/27870)によれば、Ubuntuのような従来のOSと比較して、ブートプロセス全体に大きな違いはないようです。Androidはプロセスのどこで問題を起こしますか?


1)仕様は書いたが、モデル名は書いていない!2)複数のROMも使用していますか?2)OSとHWが大きく異なるモバイルとデスクトップを比較することのポイントは何ですか?3)現在使用しているROMとAndroidのバージョンは何ですか?4)スタートアップからアプリを削除してみましたか?5)新しいROMとすべてのアプリがインストールされているROMの起動時間の違いを比較しましたか?// 自動起動を使用して、起動からアプリを削除します。
ファイアロード

多くの人がXposedモジュールを使用して仕事をしています。そのためにはGoogleが必要だと思います。他の誰かがそれらに言及できるかもしれません。
ファイヤーロード

@Firelord ROMを1つだけ使用しています。どちらもデスクトップと電話で実行されていますが、似ていない場合は似たカーネルに依存しています(異なるアーキテクチャ用にコンパイルされているだけです)。現在5.1.1を使用しています。4.0以降使用しており、起動速度は決して向上しません。アプリを完全に読み込んだときと比べて、インストールしたばかりの起動速度があっても、大きな時間差はありません。自動起動を使用すると、電話はどれくらい速く起動しますか?ちなみに、私はxperia z2にいます
KhoPhi

1
私の懸念は、すぐに使えるAndroidをもっと扱うことです。遅いです。その本当のARMはPCのプロセッサに近いわけではありませんが、最近のほとんどの電話に搭載されている速度です。起動時間は改善するはずですが、そうではありません。ARTはアプリの実行を高速化するように設計されています。箱から出してすぐに起動するために誰が取り組んでいますか?
KhoPhi 2015年

1
私のずっと古いARMベースのChromebookがすぐに起動するので、それがARMであるとは確信していません。
rjt 2016年

回答:


10

数年前、私はAndroid開発者としてAndroidの起動時間の最適化に取り組みました。明らかに、この作業の一環として、最初にAndroidが起動中に費やす時間を分析する必要がありました。

以下は簡単な調査結果です:

使用するハードウェアOMAP3430 Boardこれは、ストックAndroidがフラッシュされる開発ボードのようなものです。実際の商用/本番デバイスには、追加の特定のハードウェアがあります。起動時間を視覚化するために、開発者ツールと呼ばれるbootchart

Androidのことで、ほとんどの時間を過ごすには、 2つの分野を以下に示します。

  1. 接合体プロセス。Android OSが起動すると、Zygoteプロセスが開始され、クラスがプリロードされて、アプリケーション用の共有メモリ領域が作成されます。Javaクラスのプロロードのこの作業は、完了するまでに23秒かかります。

どうして?zygoteクラスのプリロードは、起動後のシステムの良好なパフォーマンスのために不可欠であるためです。したがって、すべてのアプリのクラスが読み込まれると、アプリの実行時間が大幅に短縮されます。

  1. パッケージマネージャーサービス。 logcatの出力では、パッケージマネージャーが4つのディレクトリをスキャンしていることがわかります。 /system/app/system/framework/data/app/data/app-private

次に、位置情報サービス、テレフォニーサービスなどのさまざまなサービスを開始するアクティビティマネージャーと呼ばれるコンポーネントがあります。これを完了するには、約11〜12秒かかります。

どうして?なぜなら、パッケージスキャンは理論的には、最初の起動後に結果のキャッシュを実行し、セキュリティの脆弱性をチェックする可能性があるためです。

これらの2回を合計すると、約35秒です。

今日の日付と年齢ではこれらの数値を無視できますが、これらの数値が示すポイントは、Android AOSPコードが起動中に時間を費やす場所です。OEMには、デバイスごとに異なる独自のハードウェアセットがあります。

もちろん、これら2つの時間のかかる手順の後にAndroidが実行する必要のある他のハードウェアおよびソフトウェアの初期化があり、これにより起動時間がさらに長くなる可能性があります。

そして、ユーザーとして何かありますか?起動プロセスをスピードアップするために私は何ができますか?

私はそうは思いません。Android開発者コミュニティとOEMはまだ起動時間の短縮に取り組んでいますが、ご想像のとおり、起動時間が最適化されるように変更を加えると、Androidフレームワークが示唆するように、通常の操作中にアプリの読み込み時間が長くなる可能性があります。エンジニア


すべての優れたVMが(smalltalkやlispのように)行うように、zygoteプロセスイメージがキャッシュされないのはなぜですか?テレフォニーAPIの準備が整う前にAndroid GUIが起動しないのはなぜですか。なぜこれがすべて連続するのですか?なぜJavaを使用するのですか?Androidの起動時間がC64の起動時間よりも遅くなる理由はありません。つまり、1秒を意味します
Lothar

4

Androidの起動が遅い?

私の電話にはクアッドコア、3ギガのRAMが搭載されています。

私の電話は1G RAM(Zenfone 4)を搭載したデュアルコアのみで、私はその問題を抱えていません。約60秒でコールドブートし、40インチで再起動します(CyannogenMod 12.1)。

一部のユーザーは、systemdでUbuntuを使用した場合の起動時間が10秒未満であり、20秒程度であると報告しています...

これは、構成および「ブート時間」と見なしたものによって異なります。私のラップトップ(i5第1世代、4 GB RAM、回転ディスク付き)は、約90秒後に使用可能(起動が完了)と見なされます。もちろん、一部のサービスを遅延/無効にして、起動時間を短縮し、必要に応じて手動で開始することができます。しかし、私の見解では、私の好みに基づいて、それは使用可能とは見なされません。

PCとモバイル

PCとモバイルLinuxを比較する際に考慮すべきいくつかの違いがあります。CPUのダウンにカーネル。最も顕著な違い:

  • デバイスの性質上、モバイルCPUは主に省電力を主な考慮事項として設計されています。これはパフォーマンスに大きく影響します。
  • Androidのカーネルいくつか持っているモバイル特有の機能アクセスO / I起動時間やハードウェアに影響を及ぼします。
  • さらに、メインライン/安定版との互換性の問題があることがわかっているAndroidカーネル。これは主に、ベンダーがデバイスドライバーと互換性のある古いカーネルバージョンを使用することを優先しているためです。AOSPマシュマロ3.18.10、安定したカーネルが現在にあるときに実行され4.6.2ます。

では、Androidの起動が非常に遅くなるのはなぜですか?

どうしてチェックしないの?:)

adbにアクセスでき、すでに開発者オプションを有効にしている場合は、次を使用してブートログを確認します。

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秒です。ファームウェアとカーネルスペースの追加時間(リンクされたasnwerでは、これはステップ1〜4に変換されます)は含まれていません。

システム全体のapkboot_progress_pms_*)の処理に最大18秒かかることに注意してください。これは、起動時間の最大 45%に相当します。これには以下が含まれます。

  • 存在しないシステムパッケージとパッケージの不完全なインストールのクリーニング
  • インストール済みアプリの検証、
  • ライブラリパスの設定
  • など(参照:PackageManagerServiceの完全なソースコード)

そのため、一般的に、総起動時間はデバイスにインストールされているパッケージ(アプリ)の数に依存します。アプリが多いほど、pmsプロセスの待機時間が長くなります。さらに、アクティビティの開始には、起動時間の5%/ 20%かかります。残りは重要ではなく、システムの動作に関する深い知識がなければ安全に変更できません。

起動プロセスを高速化するために私にできることはありますか?

  • 他のROMを試してください。ソニーは微調整のための健康的な環境を提供する「善良な人」の一人です。私はAOSPまたはCyanogenをお勧めします。制限に注意してください
  • テスト、仮定しないでください!Aの起動が遅く、Bの方が速いと仮定するのは簡単です。上記のような簡単なlogcatコマンドは、ROM間の基本的な起動時間のベンチマークに役立つ情報を明らかにします。
  • 何をしているのかわかっている場合Embedded Linux Wikiには、起動時間を改善するために可能な調整のリストがあります。

起動時間の改善について

あなたのコメントについて

ARTはアプリの実行を高速化するように設計されています。箱から出してすぐに起動するために誰が取り組んでいますか?

私の意見では、ブート時間を微調整することは不必要であり、取るに足らない利益をもたらします。お使いの携帯電話は、理論的には、ほとんどの時間アップします。より長い稼働時間とより少ないエラーを保証するために、システムの安定性を維持する(より長いブートプロセスのトレードオフを伴う)ことははるかに重要です。


adb logcat -d -b events -v threadtime | grep "boot"空を返します。再起動を確認しましたが、に一致するログがまだありませんboot
KhoPhi 2016年

@レックスフォード:うーん、私のものは問題なく動いています。ポケットベルにパイプして(例:less)、そこから検索してみてください:adb logcat -d -b events -v threadtime | less。または、logcatリングバッファーを変更する
bangbambang

0

それだけの価値があるので、私はLinuxの仮想マシンでAndroid-x86を実行し、約22秒で起動します。これは、ほとんどのGNU / LinuxディストリビューションおよびクアッドコアデスクトップCPUを搭載したSSDドライブのWindows 10と同等です。

そのため、Androidの起動時間が特に遅いとは考えていません。


質問が2015年に提出されたことに注意してください
アンディ・ヤン

@AndyYan気づきましたが、Android-x86の方がはるかに古いです。
Marc.2377、2017

ハードウェア仕様があります。そのような強力なハードウェアでは、ソフトウェアの圧力はそれほど重要ではありません(VMの効率が低下した後でも)。
アンディヤン

@AndyYan同意します...しかし、いくつかの基準では、Androidに遅いと定義しているAndroidに固有のものは何もないというのが私のポイントです。つまり、他の本格的なオペレーティングシステムと比較すると、同様のハードウェアです。これは追加する価値があると感じました。
Marc.2377 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.