Androidは4つのスタートアップモードの高度な高度な分析を進めました

Androidは4つのスタートアップモードの高度な高度な分析を進めました

4つの起動モードの詳細な分析

さまざまな起動モードとフラグは混乱しやすいため、アクティビティの起動モードも難しい点ですが、アクティビティは4つのコンポーネントの最初のものであり、プロジェクトのニーズを満たすために、非常に重要です。アクティビティ起動モードを使用します。

1.アクティビティ的LaunchMode

1.1スタートアップモード

アクティビティが起動モードを使用する理由は、アクティビティの作成がタスクスタックにあるためです。同じアクティビティを開始すると、システムは複数のアクティビティインスタンスを作成し、それらをタスクスタックに配置します。戻るキーを押すと、タスクスタックインスタンスはスタックから1つずつ飛び出します。スタックは、先入れ先出しという特徴を備えた、なじみのないものではないと思います。システムが同じアクティビティを繰り返し作成することを許可しない場合は、アクティビティの起動モードを使用して設定します。アクティビティの起動モードは、singleTop、singleTask、singleInstanceの4つの標準に分かれています。前回の記事にも関連する紹介があり、以下で簡単に説明します。

(1)標準標準モード:

これはシステムのデフォルトの起動モードです。アクティビティを開始するたびに、インスタンスが存在するかどうかに関係なく、新しいインスタンスが作成されます。AがBを開始すると、BのアクティビティはAのタスクスタックに入ります。

(2)シングルトップスタックトップ多重化モード:

この起動モードでは、新しいアクティビティはすでにスタックの一番上にあります。アクティビティを再開しても、アクティビティは再作成されません。同時に、システムのonNewIntentメソッドがコールバックされます。このメソッドのパラメーターを使用して、現在のリクエスト情報を取得できます。もちろん、ActivityのonCreate、onStart、およびonResumeメソッドは再度呼び出されません。アクティビティがスタックの最上位にない場合、アクティビティが再作成されます。

(3)シングルタスクスタック多重化モード:

これはシングルトンモードです。このモードでは、インスタンスがスタックに存在する限り、インスタンスは再作成されません。たとえば、インスタンスAを作成する場合、システムは最初にAと同じインスタンスがタスクスタックに存在するかどうかを判断します。インスタンスがタスクスタックに存在する場合、システムはAをスタックの最上位に呼び出し、そのonNewIntentメソッドを呼び出します。同時に、Aがスタックの最上位になるまで、Aより上のアクティビティインスタンスがスタックから削除されます。 ;インスタンスが存在しない場合、システムはイノベーションによって新しいインスタンスAを作成し、それをスタックの最上位にプッシュします。

(3)SingleInstanceシングルインスタンスモード:

私は通常、このタイプのアクティビティをsingleTaskモードの拡張バージョンと呼びます。singleTaskモードの特性に加えて、singleInstanceで開始されたActivityインスタンスは別のタスクスタックに存在し、後続のリクエストは新しいインスタンスを作成しません。

1.2タスクスタック

タスクスタックとは何ですか?各アクティビティは各タスクスタックにどのように割り当てられますか?次の状況はすべてsingleTaskモードです。

定義:

パラメータと言えば、TaskAffinityは、タスクの関連性に変換されます。このパラメータは、アクティビティに必要なタスクスタックの名前を識別します。デフォルトでは、アクティビティに必要なタスクスタックの名前はアプリケーションパッケージ名です。タスクスタックは、フォアグラウンドタスクスタックとバックグラウンドタスクスタックに分けられます。バックグラウンドタスクスタックのアクティビティは一時停止状態であり、ユーザーはバックグラウンドタスクスタックをフォアグラウンドに切り替えることができます。-タスクスタック

1.3起動モードを設定する2つの方法

最初の方法:AndroidMenifest構成ファイルを使用して起動モードを設定します。


 1<activity
 2      android:name=".MonitoringActivitys.MonitorActivity"
 3       android:label="@string/title_activity_monitor"
 4       android:theme="@style/AppTheme.NoActionBar"
 5       android:launchMode="singleTask">
 6       <intent-filter>
 7           <action android:name="android.intent.action.MAIN" />
 8           <category android:name="android.intent.category.LAUNCHER" />
 9       </intent-filter>
10 </activity>

2番目の方法:インテントにフラグを設定して、起動モードを設定します。

1Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
2intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3startActivity(intent);

違い:

①2番目の優先順位が最初の優先順位よりも高い

②最初のタイプはアクティビティのFLAG_ACTIVITY_CLEAR_TOPフラグを設定できず、2番目のタイプはアクティビティのsingleInstanceモードを指定できません。

おすすめ

転載: blog.51cto.com/15064450/2602811