当不设置活动时调用oncreate

时间:2013-02-27 16:19:37

标签: android performance

任何人都可以告诉我在下面的场景中该怎么做。 我有四个活动Ac1,Ac2,Ac3和Ac4,每个活动都有一个取消按钮,按下该按钮时应该转到Ac1。后退按钮也应该回溯到之前的活动。 Ac1是开始,Ac4是流程的结束。

我在取消按钮和最后一个Ac4中使用了FLAG_ACTIVITY_NEW_TASK,返回到Ac1。但这并没有像预期的那样发挥作用。 所以为了做到这一点,我有一个广播注册表,在任何活动中按下取消按钮时停止活动。因此,在收到广播接收器时,我会调用finish()来关闭堆叠的活动。 如果未设置开发人员选项,则一切正常(不要保留活动)。设置此选项后, 1. Ac1移动到Ac2。 2.启动Ac2,但清除Ac1。 3. Ac2移动到Ac3 4.启动Ac3并清除Ac2。 5.当调用取消时,广播接收器被发送到关闭活动。 6.令人惊讶的是我看到的是Ac2,而不是Ac1。我可以看到正在调用onCreate of Ac2。

我不知道如何摆脱这种情绪。任何人都可以帮助我摆脱困境。

由于

4 个答案:

答案 0 :(得分:1)

广播有点矫枉过正,FLAG_ACTIVITY_NEW_TASK不是您想要的。 尝试使用intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

在取消按钮中调用Ac1

答案 1 :(得分:1)

如果我理解正确,您希望支持一系列可能从A1增加到A4的活动。用户可以使用后退按钮从A(N + 1)转换回A(N),并且可以点击取消按钮以将整个堆栈从A(N)向下清除到A2,仅留下A1。

(对不起,如果没有比你原来的描述更清楚: - )

我的第一种方法是使用Activity.startActivityForResult开始儿童活动。当子活动退出时 - 无论是通过后退按钮,取消按钮还是正常退出 - 该子级的直接父级可以查看传递回onActivityResult的结果代码,并在结果时终止自身代码表示已选择“取消”按钮。

你尝试过这样的事吗?

答案 2 :(得分:0)

尝试将取消按钮链接到ac1尝试清除旧活动堆栈并跳转到ac1

Intent intent  = new Intent(this, ac1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
startActivity(intent);

答案 3 :(得分:0)

我会这样做:

class Activity2{

    int KILL_ACTIVITY=555;

    startActivityForResult(new Intent(Activity2.this,Activity3.class), 0);

    @Override onActivityResult(... , int result){
        if(result==KILL_ACTIVITY)
            finish();
    }

}

class Activity3{

    int KILL_ACTIVITY=555;
    @Override onClick(View v){
        if(v.getId()==R.id.button){
            setResult(KILL_ACTIVITY);
            finish();
        }
    }


    startActivityForResult(new Intent(Activity3.this,Activity4.class), 0);

    @Override onActivityResult(... , int result){
        if(result==KILL_ACTIVITY)
            finish();
    }
}