2011年6月6日月曜日

Activityの属性「launchMode」について

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 件のコメント:

コメントを投稿