minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

Activity には、4種類の起動モードを割り当てることができます。

standard

これがデフォルトです。
新しい Intent に応答するとき、新しいインスタンスが生成されます。
※ 覚えていますか? Activity は常に Intent によって起動します

よって、この Activity は、複数のインスタンスを生成することができます。

singleTop

新しい Intent に応答するとき、もし自身の Activity が「現在のスタックにあり、しかも最上位である」
場合に限り、そのインスタンスが再利用されます。
具体的に言うと、連続して同じ Activity を起動したときに、直前のインスタンスを再利用します。
現在のスタックに無かったり、あっても最上位に無い場合、新しいインスタンスが生成されます。

以下の重要な事を覚えておいて下さい。
いかなる場合においても、Intent を処理することができるのはスタック最上位の Activity に限られます

よって、この Activity は、複数のインスタンスを生成することができます。

singleTask

この Activity は起動するときに新しい Task を作り、そこに自身を配置します。
その後、自身が別の Activity を起動しようとした場合、それを同じ Task 内に配置することができます。

新しい Intent に応答するとき、もしこの Activity がその Task の最上位にあれば
これを再利用し、その Intent に応答します。
もしこの Activity の上に別の Activity が積まれていると、その Intent に応答することができません。
よって、その Intent はドロップされます。
※ ただし、この場合でもその Task はフォアグラウンドに移ります

よって、この Activity は、複数のインスタンスを生成することはありません。

singleInstance

この Activity は、その Task 内の唯一の Activity となります。
つまり、この Activity は起動するときに新しい Task を作り、そこに自身を配置します。
さらに、自身が別の Activity を起動しようとすると、常に新しい Task を作り、そこに Activity を配置します。
これによって、この Activity が所属する Task には自身以外の Activity が存在することがありません。

新しい Intent に応答するとき、このインスタンスが再利用されます。
この Activity は常に Task の最上位にあります。つまり、いつでもその Intent に応答することができます。

よって、この Activity は、複数のインスタンスを生成することはありません。

Activity と Intent

Activity のインスタンスは、最後に処理した Intent の情報を持っています。

つまり、新しいインスタンスが作成され(このとき何らかの Intent に応答している)
その後別の Activity に移ってまたこのインスタンスに戻ってきたとき、
このインスタンスは Intent の情報を利用できます。
例えば、フォームに文字を入力していたらその情報を(Intentを通じて)復元することができます。

しかし、もし Activity のインスタンスが二つ以上の Intent を処理すると
後でこのインスタンスに戻ってきても、利用できるのは最後に処理した Intent の情報だけとなります。