6

我有两个正在运行的活动:mainActivitychildActivity。每当用户单击mainActivity中的按钮时,就会启动childActivity。我想做的是:

当活动活动是childActivity并且用户单击主页按钮然后重新启动应用程序时,我希望看到childActivity 而不是启动的 mainActivity

我有一些建议实际上可以解决。我试图操纵 onStart、onRestart、onResume、onStop、onDestroy 事件。但是,他们并没有完全解决问题。应该有一个聪明的出路。谢谢你。

编辑:

谢谢你的回答,Soonil。当从最近的活动窗口调用活动时,您所说的情况正在发生。(长按主页按钮时打开的窗口)但是;从主屏幕打开它时不会发生这种情况。(比如从头开始)我不认为我的代码有特定的问题会产生这个错误。因为,我创建了一个测试项目并在发送问题之前尝试独立运行并面临同样的问题。无论如何,这是测试代码:

public class MainActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.setTitle("MainActivity");

        ((Button) findViewById(R.id.btnChildActivity)).setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        startActivity(new Intent(this, ChildActivity.class));
    }

}

public class ChildActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        this.setTitle("ChildActivity");

    }
}
4

2 回答 2

3

编辑:今天有点随机地找到了您的问题的解决方案!请参阅此错误报告。它准确地解释了你的问题。我无法重现该问题的原因是我从未让 Eclipse 直接启动应用程序。我使用 Eclipse 安装应用程序,然后自己启动它。


这已经是 Android 应用程序的默认行为,无需特殊技巧即可实现。我很惊讶您的应用程序没有表现出这种行为。每个 Android 应用程序都维护一个 Activity 堆栈,实际上是一个 LIFO 的 Activity 堆栈。这些活动可以进一步分组为任务,但根据我的经验,99% 的普通应用程序不需要了解任何有关任务的信息。

当您按下主页按钮时,整个应用程序堆栈都会进入后台。在后台,它可能随时因内存问题而被杀死,但如果在恢复之前没有多少时间过去,它通常不会被杀死,也不必重新创建。当您再次选择应用程序时,堆栈(或更准确地说,只有堆栈上的顶部项目)被恢复。

如果您的应用程序没有表现出这种行为,我怀疑它与您如何启动 mainActivity 和 childActivity 以及您可能正在使用的任何额外 Intent 标志有关。您是否有机会发布有关如何启动 mainActivity 和 childActivity 的代码片段?

于 2009-04-07T14:50:19.013 回答
-1

我回去用一个类似的应用程序进行了测试,即使进程被强制内存不足,ChildActivity 也会自动重组,正如 Soonil 所说。您是在模拟器上还是在实际设备上看到这个?

如果您运行您的应用程序并观看 logcat,您应该在启动应用程序后看到类似以下内容,然后打开 ChildActivity 并单击主页,然后再次启动您的活动:

开始活动: Intent { action=android.intent.action.MAIN categories={android.intent.categroy.LAUNCHER} flags=... comp={com.yourpackagename.MainActivity} } 启动活动 yourpackagename.ChildActivity: pid= x uid=y gids={} 显示的活动 /.ChildActivity

当您没有看到您期望的行为时,您可以发布 logcat 的输出吗?

于 2009-04-08T12:08:37.897 回答