Android:在恢复应用程序时恢复活动的Activity

时间:2009-04-07 07:04:38

标签: android android-activity

我有两个正在运行的活动: mainActivity childActivity 。只要用户点击 mainActivity 中的按钮,就会启动 childActivity 。我想做的是:

当活动活动是 childActivity 且用户点击主页按钮然后重新启动应用时,我想看到 childActivity <已启动的strong>而不是 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");

    }
}

2 个答案:

答案 0 :(得分:3)

编辑:今天有点随机找到问题的解决方案!见error report。它完全解释了你的问题。我无法重现问题的原因是我从未让Eclipse直接启动应用程序。我使用Eclipse安装应用程序,然后自己启动它。


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

按主页按钮时,整个应用程序堆栈将显示在后台。在后台,它可能会在任何时候因内存问题而被杀死,但如果在恢复之前没有多少时间过去,它通常不会被杀死而且不必重新创建。再次选择应用程序时,将恢复堆栈(或更准确地说,只是堆栈中的顶部项目)。

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

答案 1 :(得分:-1)

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

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

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

当你没有看到你期望的行为时,你能发布logcat的输出吗?