有条件地清除 activity backstack

Conditionally clear activity backstack

我正在开发一个应用程序,您可以在该应用程序上共享本地 phone 的图库应用程序中的图像。每当通过图库应用分享照片时,Activity A 都会在我的应用中打开。

照片共享遵循从 Activity AActivity B 的一些步骤,B 的最后一步打开 Main Activity

如我所愿,从 B 向后按应该可以打开 A。按 B 中的最后一个按钮应该从后台清除 AB,这样如果你按回 Main Activity,应用程序应该关闭。

我做了什么:

  1. 最初,我是用这个标志 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 打开 Main Activity 但是,这开始了一个新任务,所以即使我过去关闭我的应用程序并转到 phone 的图库应用程序,它也会显示 A 而不是该应用程序上的照片,当你按下返回,然后您可以在该图库应用程序中看到实际图像。

  2. 我已经为 AB 指定了 android:noHistory="true" 并且在没有新任务标志的情况下开始 Main Activity 的意图。这解决了新任务问题,因为当我关闭我的应用程序并切换回图库应用程序时,它显示的是实际图像而不是我的 activity A。但这里的问题是,我无法从 B 返回到 A,而且如果应用程序被最小化,那么 activity 也会消失。

创建单例class :

Stack<Activity> stack;

public void add(Activity activity){
   stack.add(activity).
}

public void remove(){
   Activity activity = stack.lastElement();
   if(activity != null) {
      stack.remove(activity).
      activity.finish();
   }
}

public void removeAll() {
   for (Activity activity : stack) {
      if (activity != null)
         activity.finish();
   }
   stack.clear();
}


在活动的 onCreate() 中调用 add()
调用删除将完成当前 activity
调用 removeAll 将完成添加到堆栈中的所有活动

 Intent l = new Intent(getApplicationContext(), MainActivity.class);
                        l.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        l.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        l.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        finish();
                        startActivity(l);

在活动 B 的完成按钮上使用这个。