在我的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中点击应用程序图标时,似乎整个任务以某种方式结束。 有人可以解释发生了什么,为什么我会得到这种行为?
答案 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));