代码之家  ›  专栏  ›  技术社区  ›  Ömer

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

  •  6
  • Ömer  · 技术社区  · 16 年前

    我有两个活动正在运行: 主要活动 儿童活动 . 每当用户单击 主要活动 , the 儿童活动 启动。我想做的是:

    当活动的活动是 儿童活动 和用户 单击“主页”按钮,然后重新启动应用程序 ,我想看看 儿童活动 而不是 主要活动 启动了。

    我有一些建议,实际上是在变通。我试图操纵OnStart、OnRestart、OnResume、OnStop和OnDestroy事件。但是,他们没有完全解决这个问题。应该有一个聪明的方法。谢谢您。

    编辑:

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

    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 回复  |  直到 14 年前
        1
  •  3
  •   sooniln    16 年前

    编辑 :今天随机找到了解决问题的方法!看到这个 error report . 它准确地解释了你的问题。我不能重现这个问题的原因是我从未让Eclipse直接启动过一个应用程序。我使用Eclipse安装应用程序,然后自己启动它。


    这已经是Android应用程序的默认行为,不需要特殊的技巧来实现这一点。我很惊讶您的应用程序没有演示这种行为。每个Android应用程序都维护一个活动堆栈,实际上是一个后进先出的活动堆栈。这些活动可以进一步分为任务,但99%的普通应用程序在我的经验中不需要知道任何关于任务的信息。

    当您按下Home按钮时,整个应用程序堆栈将被放入后台。虽然在后台,它可能在任何时候因内存问题而被杀死,但如果在恢复之前不经过太多时间,则通常不会杀死它,也不必重新创建它。再次选择应用程序时,将恢复堆栈(或更准确地说,仅恢复堆栈上的顶部项)。

    如果您的应用程序没有表现出这种行为,我怀疑这与您如何启动MainActivity和ChildActivity以及您可能使用的任何其他意图标志有关。有没有机会发布关于如何启动MainActivity和ChildActivity的代码片段?

        2
  •  -1
  •   dar    16 年前

    我回去用一个类似的应用程序进行了测试,即使这个过程被强制从内存中删除,孩子的活动也会像soonil说的那样被自动重新组织。您是在模拟器上还是在实际设备上看到的?

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

    启动活动: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的输出吗?