AndroidのAppアプリケーション起動分析と最適化
9618 ワード
前言:
昨夜の新バージョンがついに発表されましたが、テストフィードバックappが起動してから長い間appのホームページに入っていなかったことを覚えています.だから、今日はクラスを追加してApp起動のことをまとめるつもりです.
appの起動方法:
1.)コールドスタート
アプリケーションを起動すると、バックグラウンドにアプリケーションのプロセスがありません.この場合、システムは新しいプロセスを再作成してアプリケーションに割り当てます.この起動方法はコールド起動です.コールドスタートは、システムが新しいプロセスを再作成して割り当てるため、アプリケーションクラスを作成および初期化してから、一連の測定、レイアウト、描画を含むMainActivityクラスを作成および初期化し、最後にインタフェースに表示します.
2.)ホットスタート
アプリケーションを起動すると、バックグラウンドにアプリケーションのプロセス(例:backキー、homeキーを押すと、アプリケーションは終了しますが、アプリケーションのプロセスはバックグラウンドに残っていて、タスクリストに入って表示できます)があるので、既存のプロセスの場合、この起動は既存のプロセスからアプリケーションを起動します.この方法はホット起動と呼ばれます.ホット・スタートは、既存のプロセスから開始されるため、ホット・スタートはアプリケーションを実行するのではなく、一連の測定、レイアウト、描画を含むMainActivityを直接実行するため、ホット・スタートのプロセスは、新しいプロセスの作成からプロセスの破棄までアプリケーションが1回だけ初期化されるため、アプリケーションを作成および初期化する必要はありません.
appの起動プロセス:
上記の2つの起動方法から、app起動プロセスは以下の通りであることがわかります.
Applicationのコンストラクタメソッド-->attachBaseContext()->onCreate()->Activityのコンストラクタメソッド->onCreate()->トピック内の背景などのプロパティの構成->onStart()->onResume()->レイアウトペイントの測定をインタフェースに表示
appの起動最適化:
上記の起動プロセスに基づいて、できるだけ以下の点を行います. を行う. はできるだけ非同期スレッドで動作.レイアウトの階層を低減し、ライフサイクルコールバックの方法で消費時間を最小限に抑える app起動黒画面または白画面の問題に遭遇
1.)発生原因
実は黒いスクリーンあるいは白いスクリーンを表示するのは本当に正常で、これはまだレイアウトファイルにロードしていないため、すでにwindowウィンドウの背景を表示して、黒いスクリーンの白いスクリーンはwindowウィンドウの背景です.
例:
2.)解決策
設定によるスタイルの設定
(1)背景図Themeの設定
背景図を設定します.プログラムが起動すると、まずこの背景図を表示し、黒い画面が表示されないようにします.
(2)透明度の設定
スタイルを透明に設定することで、プログラムが起動すると黒い画面ではなく透明になり、インタフェースが初期化されてから一度に表示されます.
両者の比較: Theme 1プログラムの起動が速く、インタフェースに背景図が表示されてから、他のインタフェースコントロールがリフレッシュされます.非同期感をリフレッシュします. Theme 2はプログラムの起動が遅い感じがして、インタフェースが一度にブラシされて、同期をリフレッシュします.
(3)AndroidManifestを修正する.xml
解決後の例:
3.)一般的なThemeテーマ
昨夜の新バージョンがついに発表されましたが、テストフィードバックappが起動してから長い間appのホームページに入っていなかったことを覚えています.だから、今日はクラスを追加してApp起動のことをまとめるつもりです.
appの起動方法:
1.)コールドスタート
アプリケーションを起動すると、バックグラウンドにアプリケーションのプロセスがありません.この場合、システムは新しいプロセスを再作成してアプリケーションに割り当てます.この起動方法はコールド起動です.コールドスタートは、システムが新しいプロセスを再作成して割り当てるため、アプリケーションクラスを作成および初期化してから、一連の測定、レイアウト、描画を含むMainActivityクラスを作成および初期化し、最後にインタフェースに表示します.
2.)ホットスタート
アプリケーションを起動すると、バックグラウンドにアプリケーションのプロセス(例:backキー、homeキーを押すと、アプリケーションは終了しますが、アプリケーションのプロセスはバックグラウンドに残っていて、タスクリストに入って表示できます)があるので、既存のプロセスの場合、この起動は既存のプロセスからアプリケーションを起動します.この方法はホット起動と呼ばれます.ホット・スタートは、既存のプロセスから開始されるため、ホット・スタートはアプリケーションを実行するのではなく、一連の測定、レイアウト、描画を含むMainActivityを直接実行するため、ホット・スタートのプロセスは、新しいプロセスの作成からプロセスの破棄までアプリケーションが1回だけ初期化されるため、アプリケーションを作成および初期化する必要はありません.
appの起動プロセス:
上記の2つの起動方法から、app起動プロセスは以下の通りであることがわかります.
Applicationのコンストラクタメソッド-->attachBaseContext()->onCreate()->Activityのコンストラクタメソッド->onCreate()->トピック内の背景などのプロパティの構成->onStart()->onResume()->レイアウトペイントの測定をインタフェースに表示
appの起動最適化:
上記の起動プロセスに基づいて、できるだけ以下の点を行います.
Application
の作成中にできるだけ少ない時間を費やす操作SharePreference
を使用する場合、1.)発生原因
実は黒いスクリーンあるいは白いスクリーンを表示するのは本当に正常で、これはまだレイアウトファイルにロードしていないため、すでにwindowウィンドウの背景を表示して、黒いスクリーンの白いスクリーンはwindowウィンドウの背景です.
例:
2.)解決策
設定によるスタイルの設定
(1)背景図Themeの設定
背景図を設定します.プログラムが起動すると、まずこの背景図を表示し、黒い画面が表示されないようにします.
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:screenOrientation">portrait</item>
<item name="android:windowBackground">>@mipmap/splash</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
</style>
(2)透明度の設定
スタイルを透明に設定することで、プログラムが起動すると黒い画面ではなく透明になり、インタフェースが初期化されてから一度に表示されます.
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:screenOrientation">portrait</item>
</style>
両者の比較:
(3)AndroidManifestを修正する.xml
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true">
<activity android:name=".MainActivity"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//......
</application>
解決後の例:
3.)一般的なThemeテーマ
android:theme="@android:style/Theme.Dialog" //Activity
android:theme="@android:style/Theme.NoTitleBar" //
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" // ,
android:theme="Theme.Light " //
android:theme="Theme.Light.NoTitleBar" //
android:theme="Theme.Light.NoTitleBar.Fullscreen" // , ,
android:theme="Theme.Black" //
android:theme="Theme.Black.NoTitleBar" //
android:theme="Theme.Black.NoTitleBar.Fullscreen" // , ,
android:theme="Theme.Wallpaper" //
android:theme="Theme.Wallpaper.NoTitleBar" // ,
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" // , ,
android:theme="Theme.Translucent" //
android:theme="Theme.Translucent.NoTitleBar" //
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" // ,
android:theme="Theme.Panel " //
android:theme="Theme.Light.Panel" //