在调用finish()之后;当前活动,它是否会保留在BackStack中?

时间:2017-09-08 12:03:04

标签: android android-activity back-stack

我是Android新手。

我有2个活动。 A和B. A是我的发射器活动。 现在在A活动中,我正在调用B Activity并完成A活动。

像这样,

Intent ib=new Intent(this,B.class);
      startActivity(ib);
      this.finish();

那么,当B活动处于活动状态时,A是否会保留在Backstack中?我正在使用默认启动模式。

提前谢谢。

编辑:::

好的,谢谢。

现在我有一个问题,

我按照A-> B-> C。

的顺序呼叫3个活动

当我打电话给另一项活动时,我正在完成当前的活动。 通过使用,

this.finish();

我也在C Activity中为后台堆栈添加日志。 这是我的backstack打印代码::

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

如果活动在完成后不会留在后台堆叠,那么为什么我得到'NumOfActivity ::: 2'?或者我的代码或理解有问题吗?

3 个答案:

答案 0 :(得分:3)

不,如果您致电Activity Afinish()将不会留在Backstack中。 Here you can find the official documentation about it

使用finish(),它会按此顺序拨打onPause()onStop()onDestroy()

如有任何进一步的信息,请询问,希望这个帮助

修改

问题在于方法调用顺序:来自official Doc

  

生命周期回调的顺序已明确定义,尤其是在何时   这两个活动是在同一个过程中,一个是开始的   其他。这是活动A时发生的操作顺序   开始活动B:

     

活动A的onPause()方法执行。活动B onCreate(),   onStart()和onResume()方法按顺序执行。 (活动B现在   有用户关注。)然后,如果屏幕上不再显示活动A,   它的onStop()方法执行。

因此,正如您所看到的,问题是您在Activity C停止之前检查Activity B中的活动计数。

活动的生命周期:

enter image description here

答案 1 :(得分:0)

当你调用finish()时,它不会保留在backstack中

答案 2 :(得分:0)

没有ActivityA不会保留在Stack中。