以下では、SingleActivity で画面遷移は Navigation Compose を使っている前提である。
Root の Activity が finish されたり、プロセスが kill されているときに Recent Apps からアプリを開くと FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY がつく
ポイント1 : Activity 再生成時には処理しないように onCreate() では savedInstanceState をチェックする
Navigation Compose の backstack 情報は再生成に restore されるclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ... } if (savedInstanceState == null) { handleIntent(intent) } } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.let { handleIntent(it) } } ... }
ポイント2 : Recent Apps から起動されたときは処理しないように FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY をチェックする
class MainActivity : ComponentActivity() { ... private fun handleIntent(intent: Intent) { if (intent.flags and Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY != 0) { return } // intent の内容に応じて NavHostController.navigate() する } }
Task が生きているときに Recent Apps からアプリを開いても FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY はつかない Root の Activity が finish されたり、プロセスが kill されているときに Recent Apps からアプリを開くと FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY がつく