Android:多个活动和OnDestroy问题

时间:2010-10-01 18:46:53

标签: android android-activity destroy

我有几十个活动:1-Main,1-Animation,10-Other's,它是更多活动的子集(几十个)。

在Main中,您可以通过按钮转到任何 Others

其他调用子集活动,并调用动画活动。

每个活动(包括子集和动画)都有一个按钮,可以返回主活动。

所有按钮都会让用户更正活动。

问题:在主要活动中,我想通过设备的后退键退出。但是,接下来发生的事情是它在所有以前的活动中倒退。

“返回主要”按钮(在每个活动中)中有完成 onDestroy 。所以,我不确定为什么那些屏幕/活动没有被破坏......?

感谢任何意见/建议/澄清 - 谢谢

[添加代码段]

注意:我移动/添加/删除了完成,onDestroy,onStop ...尝试了很多方法,因此片段中显示的只是我试过的一种方式...

    //  ---------------------------------------------------------
mainMenu.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // do something
        Intent Maincode = new Intent();
          Maincode.setClassName(
                              "com.bt.test",
                              "com.bt.test.Maincode");
        //  startActivity(Maincode); // go to maincode  
          finish();
          onStop();
        onDestroy();
        startActivity(Maincode); // go to maincode  
    }
}); // end -----------------------------------------------

3 个答案:

答案 0 :(得分:3)

您可以发布onClick处理程序以返回主按钮吗?

你应该这样做:

Intent i = new Intent(this, MainActivity.class);
startActivity(i);
finish();

编辑: 您也可以尝试设置此标志:

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

如果接收活动已经在某个堆栈中,这应该清除调用和接收活动之间的活动堆栈。

答案 1 :(得分:1)

首先,您通常不应该自己调用onStoponDestroy(或者,就此而言,任何其他Activity生命周期方法)。由于finish,Android会为您执行此操作,如果您自己动手,可能会感到困惑。

其次,你的“返回主要”听众不应该调用任何startActivity。相反,如果要清除活动堆栈,则应该在那里调用finish。如果您可能在远离main的几个活动并希望直接返回,则应在启动子活动时使用startActivityForResult,并在“主按钮”上设置结果Intent并附加真实标记。然后,任何中间活动都会被onActivityResult调用,如果他们看到标记,他们也可以立即finish,以便控制权返回到您的主要活动。

编辑:实际上,startActivityFLAG_ACTIVITY_CLEAR_TOP是一种更直接的方式来获得相同的效果。坚持下去。

答案 2 :(得分:0)

完成不只是“完成”您的应用程序/活动,如文档状态

“当您的活动完成并且应该关闭时调用此方法。将ActivityResult传播回通过onActivityResult()启动您的任何人。”

换句话说,您对完成的调用将通过您之前进行的任何活动传播回来。