1

我有Activity A(主要)和Activity B

事实:活动 A 有:android:launchMode="singleInstance"

通常的场景是:

  1. 用户启动应用程序 > Activity A
  2. 用户点击一个项目 >Activity B

    3.A. 如果用户点击后退/上一步按钮 > Back to A没有在 B 上调用 finish()

    • 用户单击与以前相同的项目 > Forth to B
    • 在这一点上,他可以在没有新实例的情况下来回走动。这一切都在堆栈中,它不会重新创建活动。(好的!)

    3.B。如果用户点击主页,然后转到任务管理器并将应用程序带到前面> Activity B(一切都很好,到目前为止)

    • 如果用户单击 UP 按钮,它会转到 TASK MANAGER,我希望它转到Activity A(后退按钮预计会以这种方式工作,所以让我们关注 UP 按钮)。

这是我Activity B对 BACK 和 UP 按钮的实现。

@Override   
public void onBackPressed() {
    moveTaskToBack(true);
    // I don't want to finish() the activity, so the user can reclick the same
    // item without reloading the whole activity again (webview slow when parsing html).
    return;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            moveTaskToBack(true);
            // I don't want to finish() the activity... idem.
            // I need to implement here the bring Activity A to front
        break;
    }
}   

所以,我想要的是:“返回”以Activity A保持相同的想法,即在需要时使用堆栈重新加载 Activity B,而不使用 Intents(除非它调用 Activity 到前面,而不向堆栈添加项目。)

让我知道我是否清楚地解释了自己以及您是否需要更多信息。


更新:

我在以下位置找到了这个:http: //developer.android.com/training/implementing-navigation/ancestral.html

我就是这样改编的。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent upIntent = new Intent(this, Activity_A.class);
            if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities();
            } else {
                moveTaskToBack(true); // I want it this way. Don't worry.
            }
        break;
    }
}

但是 NavUtils.shouldUpRecreateTask 方法总是返回 false。

我做了http://developer.android.com/training/implementing-navigation/ancestral.html#SpecifyParent部分,所以这不是问题。

我的问题是我想识别Activity A堆栈中是否存在,即应用程序何时从任务管理器启动。

我怎样才能做到这一点?谢谢。

4

1 回答 1

1

moveTaskToBack 将整个任务移动到后台。它没有完成活动。

为了完全控制活动,您有一些可能的解决方案:

  1. 为活动创建自己的全局管理器,在它们的整个生命周期中监控它们,并决定对每个事件做什么。

  2. 您也可以在离开后立即完成每个活动,并将“它”(只是它的名称或其他内容)放入堆栈中,并在您返回时恢复其状态。

  3. 改为使用片段,并在单个活动上管理它们。不过,请注意配置更改。

于 2013-06-29T18:57:18.900 回答