Android appの起動最適化方法

5274 ワード

1.アンドロイドの起動方式
1.1コールドスタート
コールドスタート時にappのプロセスは作成されませんでした.システムが1つのappを冷間で起動するには、3つのタスクを完了する必要があります:1.app 2をロードおよび起動する.appが起動するとすぐにappに空白の開始ウィンドウ3が表示される.appプロセスの作成システムがappプロセスを作成した後、appプロセスは次のタスクを処理します:1.appというオブジェクト2を作成する.メインスレッド3を起動する.main activity 4を作成する.対応するviews 5をロードします.layout the screen 6.初期の描画プロセスを実行appプロセスが初期画面の描画を完了すると、システムプロセスは現在表示されている空白のバックグラウンドウィンドウをmain activityの画面に置き換えます.
1.2熱起動
ホット起動時、システムはあなたのactivityをフロントに移動します.appのactivityがメモリに残っている場合、オブジェクトの初期化、レイアウトのロード、レンダリングの時間を回避できます.ホットスタートとコールドスタートのシーンは、activityがactivityのレンダリングを終了する前に、空白のウィンドウが表示されます.
1.3微熱起動
2.app起動時のよくある質問
2.1比較的重いapp初期化
いくつかの不要な初期化操作、アプリケーションのonCreateでいくつかのdiskIOを実行したり、GCが発生したりします.問題を診断する方法にはmethod tracingまたはinline tracingが含まれます.Method tracingはApplicationを診断できる.onCreate関数の実行に多くの時間がかかったかどうか.Inline tracingでは、グローバルな単一オブジェクト、diskI/o、逆シーケンス化、またはループによる問題がいくつか発見されます.
これらの問題を解決する方法:必要でない初期化やdiskI/Oによる問題であれば、必要なオブジェクトのみを初期化する怠惰なロードで解決できます.たとえば、グローバルな静的オブジェクトを作成するよりも、オブジェクトが最初に必要なときにのみ初期化されるように、単一の例に移動します.あるいは、Daggerのような依存注入フレームワークを使用します.このフレームワークは、必要に応じてクラスをロードし、オブジェクトを作成するだけです.
2.2比較的重いactivity初期化
一般的なactivityでは、起動が遅いという問題があります.
  • 大きなレイアウトまたは複雑なレイアウト
  • をロード
  • uiスレッドでディスクまたはネットワークio
  • を行う
  • ロードと符号化bitmap
  • activityの他のサブシステム診断を初期化します:method tracingまたはinline tracingを介します. 

  • 問題を解決する方法:
                 1.レイアウトのレベルを減らし、表示する必要のないviewをロードせずにviewstubで置き換えることができます.
  • は、すべてのリソースの初期化を別のスレッドに動作させる.
  • まず一部viewを表示し、bitmapまたはリソースに依存するいくつかの視覚特性
  • を更新する.
    2.3スタートアップウィンドウの変更
    appのビジュアルアップ体験を向上させたい場合は、ユーザーにより高速な起動速度体験を提供します.appが最初の画面を表示する前の空白の背景ウィンドウをappのテーマに似たテーマに変更したり、空白のウィンドウの表示を直接禁止したりすることができます.
    たとえば、drawbleファイルを作成し、styleにthemeを作成し、作成したdrawbleを参照できます.それからAndroid manifestファイルでテーマを新しいスタイルに設定します.
    Layout XML file:
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
      
      <item android:drawable="@android:color/white"/>
      
      <item>
        <bitmap
          android:src="@drawable/product_logo_144dp"
          android:gravity="center"/>
      item>
    layer-list>
    

    Manifest file:
    ...
    android:theme="@style/AppTheme.Launcher" />
    

    そしてActivityのoncreateでsuper.onCreate()関数の前にトピックを必要なように設定します.
    public class MyMainActivity extends AppCompatActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        // Make sure this is before calling super.onCreate
        setTheme(R.style.Theme_MyApp);
        super.onCreate(savedInstanceState);
        // ...
      }
    }