Activityの属性「launchMode」についてです。
この属性は、Manifest.xmlで指定します。
デフォルトでは特に何も指定されていません。
launchModeとは
launchModeとは、Activityの起動モードです。
新規タスクで起動するか、他から起動できるか、といった感じの設定になります。
設定の種類は下記です。
- standard(デフォルト)
- singleTop
- singleTask
- singleInstance
使用方法は下記です。
android:
launchMode
="singleTop"
これで、Activityの起動モードが設定できます。
各起動モード
この説明に関してはかなり優秀なサイトがあったので紹介しておきます。
http://blog.livedoor.jp/ss_9/archives/1745734.html
こちらでも簡単に説明しておきます。
ポイントは、新規Activity生成時と新規Activity生成時に同じActivityが既にある時、です。
新規Activity生成時は
standard、singleTopは、そのまま今使っているタスクにActivityをのせます。
singleTask、singleInstanceは、今使っているタスクとは別に新規タスクにActivityをのせます。
新規Activity生成時に同じActivityが既にある時は
standardは、そのまま既存のタスクにActivityをのせます。
singleTopは、既にのっているActivityが上書きされます。
singleTaskは、既存Activityとその派生Activityを全て消して、Activityをのせます。
singleInstanceは、新規タスクにActivityをのせます。
ここの表現は、リンク先の絵を見ながらだとわかりやすいかと思います。
表にまとめます。
種類 | Activity新規生成時 | Activity新規生成時に既存あり |
standard | 現在のタスクに追加 | 現在のタスクに追加 |
singleTop | 現在のタスクに追加 | 現在のタスクの既存を上書き |
singleTask | 新規タスクに追加 | 現在のタスクの既存、派生を上書き |
singleInstance | 新規タスクに追加 | 新規タスクに追加 |
Activity生成時に思うような動きにならない時は、この辺のパラメータを弄ってみるといいかもしれません。
※
ActivityのonNewIntent()が呼ばれない罠にはまって行き着いたのがこれなのだが、いまいちよくわからない。
現状試したことは、
android:launchMode属性を書かない、もしくはstandardの場合は、onNewIntent()が呼ばれない。
singleInstanceもしくはsingleTaskにすると呼ばれる。
しかし、singleInstanceにすると、ほかの処理で別のActivityから値を取得するのに実装しているonActivityResult()が呼ばれなくなるという副作用が。
0 件のコメント:
コメントを投稿