我有3项活动。我想做这样的事情:
A - >按下按钮 - > B - >按下按钮 - > (销毁A,B)创建C
一切正常,但我注意到了一些"奇怪的" Android Studio日志中的行为。
当我按下活动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.
然后我再次按下活动B上的按钮:
I/System.out: The B Activity is paused.
I/System.out: The B Activity is stopped.
然后我进入活动C.但是在控制台上没有写出活动A和B被销毁,即使我在活动B中调用方法finish()。
只是,当从活动C开始我按下后退按钮时会执行此操作。
I/System.out: The B Activity is destroyed.
I/System.out: The A Activity is destroyed.
我会自动退出该应用。
我的问题是: 当我按下活动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();
}
}
修改
另一个奇怪的事情是,当我按下活动B中的按钮时,我进入活动C,然后执行活动B onStop。
可是:
什么时候触发了setResult()?和onDestroy()?
一起编辑2
如果您阅读了评论,则会出现另一个有趣的问题。
为什么从onStop()调用finish()时不会调用onDetroy()方法?当finish()方法超出onStop()时,通常会调用onDestroy()。
这是正常/按设计?
答案 0 :(得分:1)
活动在堆栈上,所以当你从一个活动开始一个新活动时,旧活动不会被破坏,它会被保留在堆栈中,因为通常你会在应用程序的生命周期中回到它,通过按下"后退按钮"。
如果需要触发活动的结果,则必须调用startActivityForResult
onDestroy是在不再需要活动时触发的,这是android框架的决定而你真的不知道,当发生这种情况时,因为android猜测它很有可能你会回到它应用生命周期。它取决于使用的内存和导航到它的距离,只是优化构建活动以避免滞后行为。
答案 1 :(得分:1)
关于你的"编辑2",当你离开屏幕直到它变黑,或者当你只是按下关闭按钮关闭屏幕时,onDestroy()实际上会被调用。
正如@Henning Luther所提到的,答案可能在Android的某个深处,也可能与表面和其他东西一起做......
如果我将完成()放在onStop()之外,它会被正常破坏。
*这不是一个完整的答案,但由于我不能发表评论,我这样做了,因为我想分享它