我有 3 项 Activity 。我想做这样的事情:
A -> 按下按钮时 -> B -> 按下按钮时 -> (销毁 A、B)创建 C
一切正常,但我注意到 Android Studio 日志中有一些“奇怪”的行为。
当我按下 Activity A 上的按钮时,这就完成了:
I/System.out: The A Activity is onStart.
I/System.out: The A Activity is onResume.
I/System.out: The A Activity is onPause.
I/System.out: The B Activity is onResume.
I/System.out: The A Activity is stopped.
然后我在 Activity B 上再次按下按钮:
I/System.out: The B Activity is paused.
I/System.out: The B Activity is stopped.
然后我进入 Activity C。但是即使我在 Activity B中调用finish()方法,控制台上也没有写出 Activity A和B被销毁。
只是,当我从 Activity C 中按下后退按钮时,就会执行此操作。
I/System.out: The B Activity is destroyed.
I/System.out: The A Activity is destroyed.
我会自动退出应用程序。
我的问题是: 为什么当我按下 Activity B 上的按钮时没有触发此操作?
B级:
startActivity(new Intent(this, C.class));
B 停止:
@Override
protected void onStop() {
Intent returnIntent = getIntent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
super.onStop();
System.out.println("The B Activity is stopped.");
}
一个类:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1){
finish();
}
}
编辑:
还有一件奇怪的事情,当我按下 Activity B中的按钮时,我进入 Activity C,并且执行 Activity B onStop。
但是:
- 正如我所说,finish() 不会触发
- setResult() 不会触发 Activity A“onActivityResult”
setResult()什么时候触发?与 onDestroy() 一起使用?
编辑2
如果您阅读评论,就会出现另一个有趣的问题。
为什么当 onStop() 调用 finish() 时,onDetroy() 方法没有被调用?当 finish() 方法超出 onStop() 时,onDestroy() 会正常调用。
这是正常的/设计使然吗?
最佳答案
Activity 位于堆栈中,因此当您从一个 Activity 启动新 Activity 时,旧的 Activity 不会被销毁,它将保留在堆栈中,因为通常您会在应用程序的生命周期中返回到它,方法是按“后退按钮”。
当您想要触发 Activity 的结果时,必须调用 startActivityForResult
onDestroy 在不再需要 Activity 时触发,这是 Android 框架的决定,您无法真正知道何时发生这种情况,因为 Android 猜测您很有可能会在您的应用程序中回到它。应用程序生命周期。它取决于使用的内存和导航到它的距离,只是构建 Activity 的优化以避免滞后行为。
关于java - Android - 调用 "finish()"不会触发 onDestroy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35972726/