我不知道为什么这么难以弄明白。我有我的主要活动,在启动时,检查这是否是第一次打开。如果是,则关闭主活动并使用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
标志可能会受到限制。
答案 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();