Android の lauchMode が ややこしすぎるので

ややこしいです、Androidのこれ。

android_launchmode

Y.A.M の 雑記帳: Android launchMode の違い Y.A.M の 雑記帳: Android launchMode の違い

たくさん言葉がでてきます。


Activity
Task
Instance

調べてみるともっといろいろ関連がでてきます。
どんどん枝から枝が生えてきます。


Affinity
Stack
Intent

ProgrammingLife.jp: アクティビティとタスク (Android) ProgrammingLife.jp: アクティビティとタスク (Android)

で、これらの詳細設定は、AndroidManifext.xml で設定したり、
以下、直接関係ありそうなのを抜粋。


android:alwaysRetainTaskState=["true" | "false"]
android:clearTaskOnLaunch=["true" | "false"]
android:excludeFromRecents=["true" | "false"]
android:launchMode=["multiple" | "singleTop" |
                    "singleTask" | "singleInstance"]
android:multiprocess=["true" | "false"]
android:noHistory=["true" | "false"]  
android:parentActivityName="string" 
android:stateNotNeeded=["true" | "false"]
android:taskAffinity="string"

activity | Android Developers  activity | Android Developers

あと、コード内で、Intent 経由で起動するとき
のオプションとしてもなんかいろいろあったり。


FLAG_ACTIVITY_BROUGHT_TO_FRONT
FLAG_ACTIVITY_CLEAR_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
...
...

IntentのCategoryとExtraとFlagの一覧表を作ってみたよ - hyoromoの日記 IntentのCategoryとExtraとFlagの一覧表を作ってみたよ - hyoromoの日記

Intent | Android Developers Intent | Android Developers

で、もうこれだけ起動方法があったらわけわらなくなります。

基本的な設定からシンプルに進むとして便利なものがあります。

adb-tools を使いましょう。


$ adb -e shell dumpsys activity -h
Activity manager dump options:
  [-a] [-c] [-h] [cmd] ...
  cmd may be one of:
    a[ctivities]: activity stack state
    b[roadcasts] [PACKAGE_NAME] [history [-s]]: broadcast state
    i[ntents] [PACKAGE_NAME]: pending intent state
    p[rocesses] [PACKAGE_NAME]: process state
    o[om]: out of memory management
    prov[iders] [COMP_SPEC ...]: content provider state
    provider [COMP_SPEC]: provider client-side state
    s[ervices] [COMP_SPEC ...]: service state
    service [COMP_SPEC]: service client-side state
    package [PACKAGE_NAME]: all state related to given package
    all: dump all activities
    top: dump the top activity
  cmd may also be a COMP_SPEC to dump activities.
  COMP_SPEC may be a component name (com.foo/.myApp),
    a partial substring in a component name, a
    hex object identifier.
  -a: include all available server state.
  -c: include client state.

TaskとActivityの関係やその生き死にがリアルタイムに
わかりやすく確認できます。


$ watch -n 1 'adb -e shell dumpsys activity a | grep -A 1000 "Running activities" | grep -B 1000 "mFocusedActivity"'

しかし、いちいち、ややこしな、Androidて。


関連ワード:  Androidツールライブラリ今さら聞けない便利な設定開発