ActivityのlaunchModeの違いを確認したい人のためにつくってみました。 このアプリをインストールすると、ランチャーに4つの起動アイコンが表示されます。 それぞれ、Standard(デフォルト)、SingleTop、SingleTask、SingleInstanceで起動するようにしています。
DeepLinkにも対応しており、以下のアドレスで起動するようにしました。
- https://launchtest.rl/standard
- https://launchtest.rl/singletask
- https://launchtest.rl/singletop
- https://launchtest.rl/singleinstance
画面間の動きも見られるように、トップ画面含めた以下の8画面分への遷移ボタンを用意しました。
- STANDARD TOP
launchmode="standard"で起動する画面
ランチャーからの起動、およびDeepLink起動も可能 - SINGLETOP TOP
launchmode="singleTop"で起動する画面
ランチャーからの起動、およびDeepLink起動も可能 - SINGLETASK TOP
launchmode="singleTask"で起動する画面
ランチャーからの起動、およびDeepLink起動も可能 - SINGLEINSTANCE TOP
launchmode="singleInstance"で起動する画面
ランチャーからの起動、およびDeepLink起動も可能 - STANDARD NEXT
launchmode="standard"で起動する画面
TOP画面から次画面遷移テスト用に作成 - SINGLETOP NEXT
launchmode="singleTop"で起動する画面
TOP画面から次画面遷移テスト用に作成 - SINGLETASK NEXT
launchmode="singleTask"で起動する画面
TOP画面から次画面遷移テスト用に作成 - SINGLEINSTANCE NEXT
launchmode="singleInstance"で起動する画面
TOP画面から次画面遷移テスト用に作成
上記画面遷移ボタン押下時にオプションとしてfragスイッチを設定できます。
- FRAG_ACTIVITY_NEW_TASK
タスクがスタックに存在しても新しいタスクとして起動 - FRAG_ACTIVITY_SINGLE_TOP
スタック最上位と同じActivityを起動しようとした時に起動しない - FRAG_ACTIVITY_CLEAR_TOP
スタックをクリアしてからActivityを起動 - FRAG_ACTIVITY_NO_HISTORY
スタックに追加せずに起動 - FRAG_ACTIVITY_LAUNCHED_FROM_HISTORY
スタック内のActivityを利用して起動 - FRAG_ACTIVITY_EXCLUDE_FROM_RECENTS
履歴内の同一Acrivityを利用して起動 - FRAG_ACTIVITY_PREVIOUS_IS_TOP
呼び出し元をタスクのトップと見なして起動 - FRAG_ACTIVITY_REORDER_TO_FRONT
スタック内の同一Activityを最前面に移動
画面表示の際、Logcat上に以下の内容にてFLAG値を参照できるようにしております。
LaunchTopActivity: get intent frags : 0x00000000
例えば、ランチャーからの起動時、DEEPLINKからの起動時だと値に差がありますが、 そういったことも確認できるかと・・・。
遷移したときのスタック状態は以下のコマンドで確認可能です。
adb shell dumpsys activity | grep "jp.ne.poropi.launchtest" | grep -B 1 "Run #[0-9]*:"
TaskRecord{6d94fb #2082 A=jp.ne.poropi.launchtest U=0 StackId=1 sz=1}
Run #1: ActivityRecord{7ad67a8 u0 jp.ne.poropi.launchtest/.activity.StandardTop t2082}
--
TaskRecord{1b3a873 #2075 A=jp.ne.poropi.launchtest U=0 StackId=1 sz=1}
Run #0: ActivityRecord{3de124d u0 jp.ne.poropi.launchtest/.activity.SingleinstanceNext t2075}