intentとtaskについて[Android]
詰まったので簡単にメモ。
特に"タスクの一番初めにスタックされたActivity起動インテント"について。
"タスクの一番はじめにスタックされたActivityを呼び出すインテント" ... とは?
ex 1) アプリ未起動の際にアプリ一覧からアプリを起動した際のインテント
ex 2) Google play booksなどの、別のタスクとしてActivityを起動するインテント
(参考)
本題
本題にして結論
"タスクが空になった後にタスク一覧からタスクを選択"すると、"タスクのはじめにスタックされたActivityを起動するインテント"が実行される
以下のようなアプリを作成して確かめて見た。
左上のボタンを押下すると、"適当な文字列をExtraに詰め込んだIntent"をActivityにsetしてfinish()する。
また、このアプリは特定のスキームに対応しているため、以下のコマンドで暗黙的インテント起動が可能
adb shell am start -d "yuta://hoge"
このアプリを
- アプリ一覧から起動→ボタン押下→タスク一覧からタスク選択
- 暗黙的インテント起動→ボタン押下→タスク一覧からタスク選択
した時に、ActivityにどのようなIntentが設定されているかを確認した。
アプリ一覧から起動→ボタン押下→タスク一覧からタスク選択
アプリ一覧から起動した時のインテントは以下
D/MainActivity: intent : Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.yutan.intentandactivitysample/.MainActivity bnds=[24,239][230,517] (has extras) }
D/MainActivity: extra : Bundle[mParcelledData.dataSize=148]
finish()後、タスク一覧から起動した際のインテントは以下
D/MainActivity: intent : Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10300000 cmp=com.example.yutan.intentandactivitysample/.MainActivity (has extras) }
D/MainActivity: extra : Bundle[mParcelledData.dataSize=148]
"適当な文字列をExtraに詰め込んだIntent"ではなく、LaunchのIntentがActivityに設定されている。
暗黙的インテント起動→ボタン押下→タスク一覧からタスク選択
D/MainActivity: intent : Intent { dat=yuta://hoge flg=0x10000000 cmp=com.example.yutan.intentandactivitysample/.MainActivity }
D/MainActivity: extra : null
finish()後、タスク一覧から起動した際のインテントは以下
D/MainActivity: intent : Intent { dat=yuta://hoge flg=0x10100000 cmp=com.example.yutan.intentandactivitysample/.MainActivity }
D/MainActivity: extra : null
やっぱり同じ結果。
最初は"finish()を行っても、プロセスが多少生きてるからでは?"と思ったのだが、System.exit()でVMを停止しても、Device Monitorでプロセスを消しても同じ結果だったことを考えると、OS管轄なのかな。。
setIntentでもクリアできないとなると、特定の手順を踏むと、予想外に2回同じ手順を踏むこともありそうだなぁ。。。。
今回のアプリ
備考 :
タスクについてはAndroid Developerで以下のように書かれている
あと、yanzmさんの記事がめちゃんこわかりやすい。