如何在活动的后堆栈中检查实例并删除活动之一

时间:2019-04-09 06:34:59

标签: android back-stack

我有3 activities,一个叠在一起

A -> B -> C -> D
  • 现在,当我在D中时,如何查找B在堆栈中是否可用
  • 现在,当B存在于后堆栈中时,仅从堆栈中删除B A,B,C,D
  • 然后再次启动B ...使结果成为ACDB

这在Android中可行吗?

PS:我需要发布代码吗?..让我知道...因为这里只是活动而没有其他逻辑

3 个答案:

答案 0 :(得分:1)

您可以使用ActivityManager来实现。下面是相同的代码,

ActivityManager m = (ActivityManager) ctx.getSystemService( ctx.ACTIVITY_SERVICE );
List<RunningTaskInfo> runningTaskInfoList =  m.getRunningTasks(10);
Iterator<RunningTaskInfo> itr = runningTaskInfoList.iterator();
while(itr.hasNext()){
    RunningTaskInfo runningTaskInfo = (RunningTaskInfo)itr.next();
    int id = runningTaskInfo.id;
    CharSequence desc= runningTaskInfo.description;
    int numOfActivities = runningTaskInfo.numActivities;
    String topActivity = runningTaskInfo.topActivity.getShortClassName();
}

这将为您提供所有活动。有关更多详细信息,请参阅文档

https://developer.android.com/reference/android/app/ActivityManager

答案 1 :(得分:0)

问题:将后退堆栈 ABCD 更改为 ACDB

解决方案::来自Android Developer文档。

  

FLAG_ACTIVITY_REORDER_TO_FRONT

public static final int FLAG_ACTIVITY_REORDER_TO_FRONT
     

如果在传递给Context#startActivity的Intent中进行设置,则此标志将   使启动的活动被带到任务的最前面   历史记录堆栈(如果已在运行)。

     

例如,考虑一个由四个活动组成的任务:A,B,C,   D.如果D使用解析为Intent的Intent调用startActivity()   活动B的组成部分,那么B将被带到   历史记录堆栈,其结果顺序为:A,C,D,B。此标志将   如果还指定了FLAG_ACTIVITY_CLEAR_TOP,则将被忽略。

答案 2 :(得分:-1)

在基本活动中,创建活动类型的数组列表。

public static ArrayList<Activity> activityArrayList = new ArrayList<>();

在更改活动时,只需在下一个活动中添加一行

BaseActivity.activityArrayList.add(this);

这些活动已添加到arrayList中,现在您可以轻松地从数组列表中添加或删除您选择的任何活动,例如,我在Base Activity中创建了多个功能,以删除所有活动或删除除main之外的所有活动

public static void finishAllExceptMain() {
  try {
    //Constants.logMessage(Constants.TAG, "outer Start Size: " + activityArrayList.size());
    int count = activityArrayList.size();
    while (count > 1) {
      count--;
      activityArrayList.get(count).finish();
      activityArrayList.remove(count);
    }

  } catch (Exception e) {

  }
}

public static void finishLastActivity() {
  int lastActivity = activityArrayList.size() - 1;
  activityArrayList.get(lastActivity).finish();
  activityArrayList.remove(activityArrayList.get(lastActivity));
}