调用 finish() 之后;当前 activity,它是否会保留在 BackStack 中?
After calling finish(); of current activity, it will remain in BackStack or not?
我是 Android 的新手。
我有 2 个 Activity。 A和B。A是我的发射器Activity。
现在在Aactivity,我在调用BActivity,也完成了Aactivity。
像这样,
Intent ib=new Intent(this,B.class);
startActivity(ib);
this.finish();
那么,当B Activity 激活时,A 会留在backstack 中吗?我使用的是默认启动模式。
提前谢谢你。
编辑:::
好的,谢谢。
现在我有一个问题,
我按 A->B->C 的顺序调用 3 个活动。
当我正在呼叫另一个 activity 时,我正在完成当前 activity。
通过使用,
this.finish();
我也在 C Activity 中放置用于返回堆栈的日志。
这是我的后台打印代码::
ActivityManager m = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<ActivityManager.RunningTaskInfo> itr = runningTaskInfoList.iterator();
while (itr.hasNext()) {
ActivityManager.RunningTaskInfo runningTaskInfo = (ActivityManager.RunningTaskInfo) itr.next();
int id = runningTaskInfo.id;
CharSequence desc = runningTaskInfo.description;
int numOfActivities = runningTaskInfo.numActivities;
String topActivity = runningTaskInfo.topActivity
.getShortClassName();
Log.d("runningTaskInfoSize",runningTaskInfoList.size()+"");
Log.d("Stack :: ","C Start --------------------->");
Log.d("Stack ID ::",id+"");
Log.d("Stack NumOfActivity ::",numOfActivities+"");
Log.d("Stack Top Activity ::",topActivity+"");
}
现在,在日志中,当 C 可见时我得到这个:
D/Stack ::: C Start --------------------->
D/Stack ID ::: 29
D/Stack Desc ::: null
D/Stack NumOfActivity ::: 2
D/Stack Top Activity ::: .C
D/Stack ::: C Start --------------------->
D/Stack ID ::: 1
D/Stack Desc ::: null
D/Stack NumOfActivity ::: 1
D/Stack Top Activity ::: com.android.launcher2.Launcher
如果Activity完成后不会留在backstack中,那么为什么我得到'NumOfActivity ::: 2'?或者我的代码或理解有问题吗?
当您调用 finish() 时,它不会保留在后台堆栈中
没有ActivityA不会留在Stack中。
不,如果您调用 finish()
,Activity A
将不会保留在后台堆栈中。
Here you can find the official documentation about it.
使用finish()
,它将依次调用onPause()
、onStop()
和onDestroy()
。
如需进一步信息,请询问,希望对您有所帮助
编辑
问题出在方法调用顺序上:从official Doc
The order of lifecycle callbacks is well defined, particularly when
the two activities are in the same process and one is starting the
other. Here's the order of operations that occur when Activity A
starts Acivity B:
Activity A's onPause() method executes. Activity B's onCreate(),
onStart(), and onResume() methods execute in sequence. (Activity B now
has user focus.) Then, if Activity A is no longer visible on screen,
its onStop() method executes.
因此,如您所见,问题是您在 Activity B
停止之前检查了 Activity C
中的 Activity 计数。
activity 的生命周期:
我是 Android 的新手。
我有 2 个 Activity。 A和B。A是我的发射器Activity。 现在在Aactivity,我在调用BActivity,也完成了Aactivity。
像这样,
Intent ib=new Intent(this,B.class);
startActivity(ib);
this.finish();
那么,当B Activity 激活时,A 会留在backstack 中吗?我使用的是默认启动模式。
提前谢谢你。
编辑:::
好的,谢谢。
现在我有一个问题,
我按 A->B->C 的顺序调用 3 个活动。
当我正在呼叫另一个 activity 时,我正在完成当前 activity。 通过使用,
this.finish();
我也在 C Activity 中放置用于返回堆栈的日志。 这是我的后台打印代码::
ActivityManager m = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<ActivityManager.RunningTaskInfo> itr = runningTaskInfoList.iterator();
while (itr.hasNext()) {
ActivityManager.RunningTaskInfo runningTaskInfo = (ActivityManager.RunningTaskInfo) itr.next();
int id = runningTaskInfo.id;
CharSequence desc = runningTaskInfo.description;
int numOfActivities = runningTaskInfo.numActivities;
String topActivity = runningTaskInfo.topActivity
.getShortClassName();
Log.d("runningTaskInfoSize",runningTaskInfoList.size()+"");
Log.d("Stack :: ","C Start --------------------->");
Log.d("Stack ID ::",id+"");
Log.d("Stack NumOfActivity ::",numOfActivities+"");
Log.d("Stack Top Activity ::",topActivity+"");
}
现在,在日志中,当 C 可见时我得到这个:
D/Stack ::: C Start --------------------->
D/Stack ID ::: 29
D/Stack Desc ::: null
D/Stack NumOfActivity ::: 2
D/Stack Top Activity ::: .C
D/Stack ::: C Start --------------------->
D/Stack ID ::: 1
D/Stack Desc ::: null
D/Stack NumOfActivity ::: 1
D/Stack Top Activity ::: com.android.launcher2.Launcher
如果Activity完成后不会留在backstack中,那么为什么我得到'NumOfActivity ::: 2'?或者我的代码或理解有问题吗?
当您调用 finish() 时,它不会保留在后台堆栈中
没有ActivityA不会留在Stack中。
不,如果您调用 finish()
,Activity A
将不会保留在后台堆栈中。
Here you can find the official documentation about it.
使用finish()
,它将依次调用onPause()
、onStop()
和onDestroy()
。
如需进一步信息,请询问,希望对您有所帮助
编辑
问题出在方法调用顺序上:从official Doc
The order of lifecycle callbacks is well defined, particularly when the two activities are in the same process and one is starting the other. Here's the order of operations that occur when Activity A starts Acivity B:
Activity A's onPause() method executes. Activity B's onCreate(), onStart(), and onResume() methods execute in sequence. (Activity B now has user focus.) Then, if Activity A is no longer visible on screen, its onStop() method executes.
因此,如您所见,问题是您在 Activity B
停止之前检查了 Activity C
中的 Activity 计数。