奇怪的活动开始订单 - Android

时间:2016-10-10 14:45:15

标签: android android-activity android-lifecycle

在我的Android应用程序中,我有3个活动A,B和C

活动A是我的应用程序的启动器活动,其中有一个按钮,点击时带有以下代码:

startActivity(new Intent(this , B.class));
finish();
活动B中的

我有一个启动活动C的按钮:

startActivity(new Intent(this , C.class));

在活动C中,我需要在按下主页按钮时完成活动:

public boolean onKeyDown(int keyCode,KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_HOME)
    {
        finish();
        return true;
    }
    return super.onKeyDown(keyCode,event);
}

现在我希望我的任务中的顶级活动是活动B,但是当我从启动器点击活动A中点击应用程序图标时,似乎整个任务以某种方式结束。 有人可以解释发生了什么,为什么我会得到这种行为?

2 个答案:

答案 0 :(得分:1)

将此代码插入您的第一个活动并在 onCreate(...)

内调用
 private void killIfIsnotTaskRoot() {
    if (!isTaskRoot()
            && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
            && getIntent().getAction() != null
            && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

        finish();
        return;
    }
}
  

...还可以创建“singleTop”活动的新实例来处理新意图。但是,如果目标任务已经在其堆栈顶部具有活动的现有实例,则该实例将接收新意图(在onNewIntent()调用中);未创建新实例。在其他情况下 - 例如,如果“singleTop”活动的现有实例在目标任务中,但不在堆栈顶部,或者它位于堆栈顶部,而不是在目标任务中 - 将创建新实例并将其推送到堆栈中。

查看此链接How to prevent multiple instances of an activity when it is launched with different intents

答案 1 :(得分:0)

在您发布的代码中,活动B正在尝试启动活动B,而不是活动C.

活动B中的

我有一个启动活动C的按钮:

startActivity(new Intent(this,B.class));

应该是:

活动B中的

我有一个启动活动C的按钮:

startActivity(new Intent(this,C.class));