説明しづらいけど、現象は以下。
- HOME画面のアイコンをタップしてアプリを起動する
- アプリ使用中にHOMEボタンをタップしてアプリをバックグラウンドに送る
- HOME画面のアイコンをタップして再度アプリをフォアグラウンドにする
- 起動画面が表示されてしまう(正しくはバックグラウンドに入る前に表示していた画面に戻るべき)
原因は以下。
- 起動後に表示されるActivityのlaunchModeはsingleInstance
- 起動画面(LaunchActivity)は起動が終わったらfinishして解放される
- singleInstanceモードでは、Activityは必ずタスクに一つだけになる。つまり、Activity起動時にFLAG_ACTIVITY_NEW_TASKを指定しなくてもTaskが新しく生成される。そして起動時のタスクはLaunchActivityが消えたことによって消滅する。
- 二度目にHOME画面のアイコンをタップした時には、前回アプリを起動した時に出来たタスクが無くなっているのでOSがアプリは起動中で無いと判断しandroid.intent.category.LAUNCHERインテントを送り起動画面を表示していた。
解決策はsingleInstanceの指定を消すこと。タスクの状態を可視化する方法はないのかな。原因を調べるのに苦労した。。
参考: