[英]Why is onDestroy always called when returning to parent activity?
我有一個基於構建您的第一個應用程序教程的非常簡單的應用程序。 有兩個活動: MainActivity
通過startActivity()
調用DisplayMessageActivity
。
輸入DisplayMessageActivity
,我看到:
MainActivity.onStop()
正如預期的那樣,但是當我按下后退按鈕返回父MainActivity
,我得到:
MainActivity.onDestroy()
MainActivity.onCreate(null)
MainActivity.onStart()
對於這個非常簡單的應用程序,活動總是被破壞。 但是根據文檔(第二個要點),典型的行為是在這種情況下停止並重新啟動活動。
此外,在首次啟動子活動時不會發生onDestroy()
,而只會在單擊后退按鈕時發生。
兩個問題:
null
在這里被傳遞給onCreate()
? 這阻止我通過onSaveInstanceState()
保留狀態。請注意,我已驗證設置 -> 開發人員選項 -> 應用程序 -> 不保留活動未選中。
編輯:
以下是子活動與父活動的鏈接方式:
<activity
android:name="com.example.helloworld.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.helloworld.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.helloworld.MainActivity" />
</activity>
通過DisplayMessageActivity.onOptionsItemSelected()
跟蹤,我可以看到它正在調用Activity.onNavigateUp()
。
感謝 Greg Giacovelli 的評論,我在這里找到了答案。 解決方案是將android:launchMode="singleTop"
設置為父活動。
我還是不明白為什么這樣的基本信息如此未知和難以找到!
在 Manifest 中添加 launchMode 每次都會更改啟動模式,即使它不是由子活動啟動的。 還有其他方法可以啟動現有實例。
1.override onOptionsItemSelected(item: MenuItem)
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
android.R.id.home -> {
// Respond to the action bar's Up/Home button
val upIntent: Intent? = NavUtils.getParentActivityIntent(this)
when {
upIntent == null -> throw IllegalStateException("No Parent Activity Intent")
else -> {
//add launch flag here
upIntent.flags=Intent.FLAG_ACTIVITY_CLEAR_TOP
NavUtils.navigateUpTo(this, upIntent)
}
}
true
}
else -> super.onOptionsItemSelected(item)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.