有条理地清除活动后台堆栈

时间:2016-09-09 07:10:10

标签: android android-intent android-activity back-stack

我正在制作一个应用程序,您可以在其中分享来自本地手机图库应用的图像。每当通过图库应用分享照片时,我的应用就会打开Activity A

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

我想要的是,从B回来应该打开A。按下B中的最后一个按钮可以从后台清除AB,这样如果您按下Main Activity,应该关闭该应用。

我做了什么:

  1. 最初,我使用此标记Main Activity打开intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 但是,这开始了一个新的任务,所以即使我以前关闭我的应用程序并转到手机的图库应用程序,它会显示A而不是该应用程序上的照片,当您按下时,那么你可以在那个画廊应用程序中看到实际的图像。

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

2 个答案:

答案 0 :(得分:1)

创建一个单例类:

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();
}


在你的活动中调用add()&#39;的onCreate()
call remove将完成当前活动
call removeAll将完成添加到堆栈中的所有活动

答案 1 :(得分:0)

 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中的完成按钮上使用此功能。