假设有A,B,C,D和E等活动。我正在活动E中创建一个主页按钮。现在,如果我从活动A移动到B,然后移动到C,最后移动到D.
现在当我点击主页按钮时,当我在D活动中时,我想完成所有其他活动。
因此,当用户再次启动应用程序时,它将无法打开D活动。相反,它将从第一个活动打开,即A.那么如何做到这一点。请建议我。
此致 Anshuman
答案 0 :(得分:9)
在活动D中,您只需定义FLAG_ACTIVITY_CLAR_TOP
标志,同时定义启动主页活动A的意图。
例如:
public void btnHomeClick(View v) {
Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
答案 1 :(得分:1)
您可以在点击主页按钮时使用System.exit(0);
。
答案 2 :(得分:1)
按HomeButton完成所有活动的最佳方法如下所述:
如果您只需要支持API级别16+(Android 4.1 / JELLY_BEAN及更高版本)
finishAffinity();
完成调用它的当前活动以及当前任务中具有相同关联的紧接其下的所有活动。
要在首页按钮按下事件上呼叫finishAffinity();
,您可以按以下方式收听主页按钮按下事件:
密钥代码常量:public static final int KEYCODE_HOME;
此密钥由框架处理,永远不会传递给应用程序。因此,您需要在活动中覆盖以下方法。
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
覆盖上述方法后,现在您可以使用onKeyDown()方法轻松收听活动中的HOME键。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
要完成API级别16之前的所有活动(在Android 4.1 / JELLY BEAN之前),您必须跟踪堆栈中的所有活动,并通过传递HOME按钮为所有活动调用finish();
事件结果返回到先前的调用活动(并且没有,没有办法遍历Activity堆栈,因此您必须使用startActivityForResult()和OnActivityResult()自行管理所有这些。
不要使用System.exit(0);
,因为如果您在堆栈上有多个活动,则不会终止您的应用。实际发生的是,进程被杀死并立即重新启动,堆栈上只有少量活动。这也是当您的应用程序被“强制关闭”对话框杀死时,甚至当您尝试从DDMS终止该进程时发生的情况。据我所知,这是一个完全无证的事实。
答案 3 :(得分:0)
首先,我们无法覆盖android中的“home”按钮(即硬件按钮)。