Androidが開発したActivityの4つの起動モードの紹介
すでに長い間Android開発をしていましたが、先日友人が面接でAndroid開発におけるActivityのいくつかの起動パターンを面接官に聞かれました.
Activityには4つの起動モードがあります
「activity」タブの「launchMode」で設定
standard
singleTop
singleTask
singleInstance
この4つの起動モードについてそれぞれ紹介します
Standard、デフォルトモード、後進先出の原則に従い、同じまたは異なるactivityが複数存在することを許可し、starActivity()ごとにタスクスタックTaskにアクティビティインスタンスを追加し、アクティビティ(Activity)が同じかどうかにかかわらずbackごとにスタックトップから1つ取り出します.これが後進先出の原則です.
singleTop、スタックトップモード、すなわち同じタスクスタックに異なるアクティブインスタンスが存在することは許可されず、起動したactivityがスタックトップにある場合、インスタンスは再作成されず、onNewIntent()メソッドが呼び出され、起動したactivityがスタックトップにない場合、スタックトップに新しいインスタンスが作成されます.
singleTask、すなわち、タスクスタックにインスタンスが含まれている場合、新しいインスタンスを作成せずにインスタンスを起動するときにonNewIntent()メソッドを呼び出し、そのインスタンスをタスクスタックのスタックの上部に配置すると、その上のインスタンスはすべて削除され、インスタンスがなければインスタンスが作成されます.
singleInstance、つまりActivityを起動すると、インスタンスは新しいtaskに配置され、他のインスタンスは存在しません.
そう言えば分かりやすいのではないでしょうか.参考までに、皆さんのご指摘を歓迎します.
Activityには4つの起動モードがあります
<activity android:name=".MainActivity" android:launchMode="standard" />
「activity」タブの「launchMode」で設定
standard
singleTop
singleTask
singleInstance
この4つの起動モードについてそれぞれ紹介します
Standard、デフォルトモード、後進先出の原則に従い、同じまたは異なるactivityが複数存在することを許可し、starActivity()ごとにタスクスタックTaskにアクティビティインスタンスを追加し、アクティビティ(Activity)が同じかどうかにかかわらずbackごとにスタックトップから1つ取り出します.これが後進先出の原則です.
:A->B->C->A BACK:A->C->B->A
singleTop、スタックトップモード、すなわち同じタスクスタックに異なるアクティブインスタンスが存在することは許可されず、起動したactivityがスタックトップにある場合、インスタンスは再作成されず、onNewIntent()メソッドが呼び出され、起動したactivityがスタックトップにない場合、スタックトップに新しいインスタンスが作成されます.
:B singleTop ,A->B->B BACK:B->A, B
A->B->A->B BACK:B->A->B->A,B ,
singleTask、すなわち、タスクスタックにインスタンスが含まれている場合、新しいインスタンスを作成せずにインスタンスを起動するときにonNewIntent()メソッドを呼び出し、そのインスタンスをタスクスタックのスタックの上部に配置すると、その上のインスタンスはすべて削除され、インスタンスがなければインスタンスが作成されます.
:B singleTask,A->B->A->B BACK:B-A
A->B->B BACK:B->A
singleInstance、つまりActivityを起動すると、インスタンスは新しいtaskに配置され、他のインスタンスは存在しません.
:B singleInstance ,A->B BACK:B->A
A->B->A BACK:A->A->B
A->B->A->B BACK:B->A->A
そう言えば分かりやすいのではないでしょうか.参考までに、皆さんのご指摘を歓迎します.