清除任务并开始新活动

时间:2012-01-17 06:03:50

标签: android android-activity android-intent task

我不知道为什么这么难以弄明白。我有我的主要活动,在启动时,检查这是否是第一次打开。如果是,则关闭主活动并使用FLAG_ACTIVITY_NEW_TASK打开设置/简介活动。设置过程包括三个活动(A,B和C)。在活动C结束时,如何清除它以及包含A,B和C的设置任务并再次启动主活动。我尝试将FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP添加到主要活动Intent但是当我按下BACK时,它会返回到设置过程的活动C.当C完成并启动主要时,如何让它清除活动A,B和C的任务?谢谢!

我正在Android 1.6(API 4)中构建,因此某些Activity标志可能会受到限制。

4 个答案:

答案 0 :(得分:2)

FLAG_ACTIVITY_CLEAR_TOP将清除同一活动实例的活动。在您的情况下,您的所有活动都是不同的实例,因此FLAG_ACTIVITY_CLEAR_TOP将不起作用。要清除任务,请在每个活动中创建一个Activity实例,并在每个活动的onCreate方法上指定该实例“this”。每当你想清除你的任务时,jus就会调用instance.finish()。并开始你想要的活动。

答案 1 :(得分:1)

实际上这可以通过startActivityForResult

来实现
public class A extends Activity {
   public onButtonClick() {
      startActivityForResult(new Intent(this, B.class), 0);
   }
   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (resultCode == RESULT_OK) {
         finish();
      }
   }
}

public class B extends Activity {
   public onButtonClick() {
      startActivityForResult(new Intent(this, C.class), 0);
   }
   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (resultCode == RESULT_OK) {
         setResult(RESULT_OK);
         finish();
      }
   }
}

public class C extends Activity {
   public onButtonClick() {
      setResult(RESULT_OK);
      finish();
   }
}

我认为这是正确的方法,你不会以这种方式泄漏任何东西。

PS:我知道这是老帖子,但也许有人会觉得这很有用。

答案 2 :(得分:0)

我回答了类似的问题here

正如穆达西尔在发表新评论后立即在finish()你的评论中说的那样。

答案 3 :(得分:0)

class A extends Activity { 
public static Activity instanceOfA = null;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instanceOfA = this;
}
}

class b extends Activity { 
public static Activity instanceOfB = null;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instanceOfB = this;
}
}


class c extends Activity { 
public static Activity instanceOfC = null;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instanceOfC = this;
}
}

现在假设您要清除当前活动中的所有任务,然后调用     instanceOfA.finish();     instanceOfB.finish();     instanceOfC.finish();