ポイント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() する
- }
- }
Root の Activity が finish されたり、プロセスが kill されているときに Recent Apps からアプリを開くと FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY がつく