我有两个活动的简单应用程序。这是显而易见的:
<application>
<activity
android:name=".ActivityA"
android:theme="@style/AppTheme.NoActionBar.Map">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".ActivityB"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="https://stackoverflow.com/"
android:scheme="http"
android:pathPrefix="/questions/ask"
/>
</intent-filter>
</activity>
</>
正如您所看到的,当点击链接“https://stackoverflow.com/questions/ask”时,我的应用会打开第二个活动。 在ActivityB中,我重写onBackPressed方法:
override fun onBackPressed() {
if(isTaskRoot){
startActivity(Intent(this, MapActivity::class.java))
finish()
} else {
super.onBackPressed()
}
}
所以当第二个活动从链接开始时我点击后面的btn,ActivityA打开,ActivityB结束。
第一眼看上去一切都很好,但如果在此之后我按回家btn,然后从堆栈重新启动应用程序 - 再次打开ActivityB而不是ActivityA。
请解释一下为什么会发生以及如何解决这个问题。谢谢!
更新 在ActivityB中的onBackPressed之后,ActivityA被打开,然后我点击了BackBtn而不是HomeBtn,因此应用程序已关闭。在这种情况下,从堆栈重新启动后,ActivityB将被打开。
答案 0 :(得分:0)
当您在ActivityB
中按下主页btn时,Android会在活动生命周期中调用onPause()
方法,此时您的应用会在activityB上暂停。它没有像你覆盖onBackPressed()
那样被破坏。因此,当您再次重新启动应用时,SO将会在靠背的onResume()
上呼叫ActivityB
。
要更改此行为,您必须在手动完成活动时覆盖onPause()
方法。