繁体   English   中英

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

[英]Android: Restoring the active Activity while resuming the application

我有两个运行的活动: 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");

    }
}

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


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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM