androidパフォーマンスの最適化-ウォームスタートコールドスタートを開始します



Android Performance Optimization Start Warm Start Cold Start



まず、アプリケーションを起動します

一般に、スタートモードにはコールドスタートとウォームスタートの2種類があります。



1.コールドスタート:アプリケーションを起動するとき、バックグラウンドでアプリケーションを処理しないと、システムはアプリケーションに割り当てられた新しいプロセスを再作成します。これは、コールドスタートを開始する方法です。

2、ホットスタート:アプリケーションを開始するとき、アプリケーションプロセスはバックグラウンドでした(たとえば、戻るボタン、ホームボタンを押すと、アプリケーションは終了しますが、アプリケーションプロセスはバックグラウンドのままですが、次のように入力できます)タスクリストビュー)したがって、既存のプロセスからアプリケーションの起動を開始する既存のプロセスの場合、このアプローチはホットスタートと呼ばれます。



特徴

1.コールドスタート:システムが割り当てられた新しいプロセスを再作成し、Applicationクラスを作成して初期化し、次にMainActivityクラス(一連の測定、レイアウト、描画を含む)を作成して初期化するため、コールドスタートします。最終的にインターフェイスに表示されます。

2、ホットスタート:プロセスから開始する必要があるため、ウォームスタート。このステップではアプリケーションのホットスタートではなく、MainActivity(一連の測定、レイアウト、描画を含む)に直接移動するため、ホットスタートはプロセスは、アプリケーションを作成して初期化する必要なしに、回線上でMainActivityを作成して初期化するだけで済みます。



新しく作成されたアプリケーションプロセスから破棄プロセスまで、アプリケーションの初期化は1回だけです。

次に、申請プロセスを開始します

コールドスタート起動プロセス:アプリ起動アイコンをクリックすると、AndrewシステムはZygoteプロセスから作成されたフォークを実行し、新しいプロセスがアプリケーションに割り当てられます。これは、Applicationクラスの作成と初期化、MainActivityクラスの作成、テーマの読み込みを行うために実行されます。のスタイルテーマ

windowBackground MainActivityその他のプロパティを使用して、いくつかの属性とアクティビティレベルを構成し、レイアウトを膨らませます。onCreate/ onStart / onResumeメソッドが最終的にコンテンツを完了したときに、表示画面でメジャー/レイアウト/描画を表示します。

アプリケーションを初めて起動したときは完了していません。この時点で、最初のフレームとも呼ばれるインターフェイスが表示されます。したがって、要約すると、申請プロセスを開始するには次のようにします。

コンストラクターメソッドの適用-> attachBaseContext()-> onCreate()->アクティビティコンストラクター-> onCreate()->構成テーマの背景プロパティ-> onStart()-> onResume()->インターフェイスに表示される測定レイアウト図。

実質的に次のように処理します。

1、デスクトップアイコンをクリックすると、ランチャーはさまざまなアクティビティに従ってプログラムロジックを再起動した後、プログラムのデフォルトのアクティビティを開始します

2.アクティビティの開始ActivityManagerServiceは、Androidアプリケーションフレームワークレイヤーのサービスプロセスアプリケーションフレームワークレイヤー(サービスはActivityManagerServiceのプロセスを開始することです)の助けを必要とします。ActivityManagerServiceは非常に重要なインターフェイスです。

アクティビティとサービスの開始に責任があるだけでなく、アクティビティは、管理とサービスにも責任があります。

ステップ1.LauncherでActivityを開始するか、内部のActivity New Activityを介してstartActivityインターフェースを開始するか呼び出すか、すべてプロセス間通信Binderを介してActivityManagerServiceプロセスに接続し、ActivityManagerService.startActivityインターフェースを呼び出します。

ステップ2.ActivityManagerServiceはActivityStack.startActivityMayWaitを呼び出して、アクティビティ関連情報を開始する準備をします

ステップ3.ActivityStack通知ApplicationThreadアクティビティスケジューリングを開始するために、ここに示されているApplicationThreadは、アプリケーションをクリックしてシーンのアイコンであるActivityManagerService.startActivityインターフェイスプロセスを呼び出しています。このプロセスはランチャーです。

アクティビティシナリオ内でstartActivityを呼び出すことにより、このプロセスはこのアクティビティが実行されるプロセスです。

ステップ4.ApplicationThreadは実際の起動操作を実行しません。インターフェイスをActivityManagerService.activityPausedActivityManagerServiceを呼び出してプロセスに入り、Activityを開始するために新しいプロセスを作成する必要があるかどうかを確認します。

ステップ5.アプリケーションのアイコンActivityManagerServiceをクリックしてアクティビティを開始するシーンの場合このステップでは、startProcessLockedを呼び出して新しいプロセスを作成し、startActivityによるアクティビティ内の呼び出しで新しいアクティビティを開始する場合、このステップはそうではありません。実行する必要があります、

元のアクティビティの過程で開始される新しいアクティビティは、

ステップ6.ActivityManagerServicがApplicationThread.scheduleLaunchActivityインターフェースを呼び出し、アクティビティを開始する操作を実行するように適切なプロセスに通知します

ステップ7.ApplicationThreadは、対応するActivityクラスClassLoaderを介して導入されたActivity ActivityThread、ActivityThreadを開始する操作を転送してから、起動します。

第三に、白黒画面の最適化された起動時間の過程でのコールドスタートの遭遇

1、白黒の問題:

2.0アップグレードandroidstudioとInstantRunの後、コードビハインドをすばやくデプロイできるようにするためのInstant Runは、実際にはサーバーなどの非常に複雑なロジックのセットであり、通信でAPK Android Studioを確立し、コードの比較と相違点を置き換えます、などは、開発プロセスで白黒の問題が表示される場合があります、

プログラムの一般リリース版はこの現象ではありません

その後、白黒の問題が発生する場合は、スタイルファイルを見ることができます

...... true true

2つのプロパティwindowIsTranslucentとwindowNoTitleを結合し、これら2つのプロパティをtrueに設定すると、初期化プログラムのメインインターフェイスの終了が表示された後、プログラムの初期化時間ウィンドウを透明にすることができるため、白のようには見えません。画面インターフェース

2、最適化された起動時間

活動開始時間を測定する-------reportFullyDrawn()メソッドのアクティビティ

()のreportFullyDrawnアクティビティを呼び出す必要があります。 apkの初期化(以前の表示時間は同じ)からログに報告され、reportFullyDrawn()メソッドが呼び出される時間。

reportFullyDrawn()ログ表示メソッドは次のようになります。

ActivityManager:表示されたcom。 アンドロイド .myexample / .StartupTiming:+ 768ms

reportFullyDrawn 4.4()メソッドの呼び出しはクラッシュし(ただし、通常の印刷をログに記録できます)、UPDATE_DEVICE_STATS権限が必要であることを示しますが、権限はシステムアプリのみを承認できます。ソリューションが調整されます

try {reportFullyDrawn() } catch (SecurityException e){ }起動時間を測定する方法がありますそのscreenrecordコマンドも言及する価値があります

まず、-bugreportオプション(フレームにタイムスタンプを追加できます-はL特性にある必要があります)screenrecordコマンドで開始します。

$ adb shell screenrecord --bugreport /sdcard/launch.mp4
次に、アプリアイコンをクリックして、アプリの表示(ctrl-C screenrecord)を待ち、adbpullコマンドを使用してファイルをコンピューターにエクスポートします。
$ adb pull /sdcard/launch.mp4

これで、録画ビデオを開いて何が起こるかを確認できます。ビデオプレーヤーをフレームごとに表示する必要があります(MacでのQuicktimeは可能ですが、他のプレーヤーでこの機能を使用して最高のOSを作成する方法がわかりません)。次に、フレームごとに再生します。ビデオタイムスタンプのフレームの上部に注意してください。

これまでにアプリアイコンが強調表示されるまで直進します。今回はイベントが処理され、アイコンをクリックするとアプリが起動し、この時間枠が記録されます。これまでのアプリのUI全体の最初のフレームが表示されるまで、フレームの再生を続けます。状況に応じて(起動ウィンドウがある場合、起動画面がある場合など)、

イベントの実際のシーケンスが発生し、ウィンドウが異なる場合があります。単純なアプリの場合、最初に起動ウィンドウが表示され、次にアプリの段階的な実際のUIが表示されます。 UIに何かが表示されたら、最初のフレームを記録し、レイアウトと描画アプリを完成させる必要があります。準備が整い始めました。この時間枠の発生も記録します。

これで、これらの2つの時間の減算((UIが表示されます)-(アイコンがタップされました))は、クリックアプリから常に描画の準備ができています。この時間にはプロセスが開始される前の時間が含まれますが、少なくとも他のアプリと比較するために使用できます。

Androidのコールドスタート時間の最適化

コールドスタート時間とは、ユーザーがアプリの瞬間をクリックしてシステムがActivity.onCreateを呼び出すことを意味します(その間の時間)。この期間中、WindowManagerは最初にアプリのテーマスタイルwindowBackgroundを要素アプリのプレビューとしてロードし、次に実際のレイアウトレイアウトのアクティビティをロードします

コールドスタート時間の最適化

コールドスタート時間後のAndroidの原理を知っていると、いくつかのヒントによってコールドスタート時間に最適化できるため、アプリを「高速」にロードできます(高速なビジュアルエクスペリエンス)。 .9画像のアクティビティの開始背景スタイルを作成してから、この画像.9をwindowBackgroundとして配置できます。

写真ができたら、次の設定で、Elementsアプリのコールドスタートフェーズのプレビューとして使用できます。

  • カスタムテーマを開始するためのアクティビティ

    @drawable/window_background_statusbar_toolbar_tab
  • 適用する新しいテーマ設定AndroidManifest.xml in

    |_+_|
  • MainActivityが新しいテーマを設定したため、これにより元のテーマが上書きされるため、MainActivityは元のテーマに戻す必要があります

|_+_|