我已经开发了 android 应用程序,菜单选项中有退出按钮。我想要退出应用程序并在按下退出按钮时进入主屏幕。为此,我使用了以下方法
1.System.exit(0)
2.finish()
3.android.os.Process.killProcess(android.os.Process.myPid())
4.System.runFinalizersOnExit(true);
这些所有方法都直接应用到我的第一页而不是主屏幕。那么我该怎么做呢?请帮我
首先关闭一个 android 应用程序是不受欢迎的,因为后退按钮和主页按钮已经有点给你这个功能。但如果你需要,你可以这样做
当用户希望退出所有打开的活动时,他们应该按下一个按钮,该按钮会加载您的应用启动时运行的第一个活动。
Intent intent = new Intent(getApplicationContext(), FirstActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
上面的代码清除了除第一个活动之外的所有活动。然后将此代码放入第一个活动的中,以在传递“退出”消息onCreate()
时发出自毁信号。
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
1)“退出”按钮是邪恶的。Android 中不需要它们。用户按下返回或主页。让安卓做导航。
2)永远不要使用 System.exit() 除非你有很好的理由并且你知道你在做什么。让 Android 做它自己的应用程序管理。
3)只需使用finish()。这是关闭应用程序的文档化推荐方式。
为了返回主屏幕,您可以使用以下代码:
// This you have to insert inside the exit button click event
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
onQuitPressed();
//This is the onQuitPressed method
//to remove application from task manager
public void onQuitPressed() {
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
}
希望这可以帮助!
System.exit(0)
应该可以工作,但不知道为什么它不能与您合作,替代解决方案是致电Home Intent
,
它会在主屏幕上重定向到您,但它将您的应用程序保持在后台,因此下次启动应用程序时,它将从您上次离开的位置开始。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
这个解决方案有一个 hack。
使用该方法启动每个 ActivitystartActivityForResult(intent, 1)
并覆盖一个方法onActivityResult()
,然后在 onActivityResult() 中输入下面给出的代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_CANCELED){
setResult(Activity.RESULT_CANCELED);
onBackPressed();
}
}
并为每个活动设置一个结果onCreate()
setResult(Activity.RESULT_OK);
现在你要做的是你想要退出应用程序的 Activity 设置
setResult(Activity.RESULT_CANCELED);
并调用 onBackpress 方法
onBackPressed();
希望这将帮助您并解决您的问题。
在所有情况下,使用第二个选项,即finish()
终止当前活动并开始另一个活动,即StartActivity(new intent(this, whichActicityUwant.class)); then call finish();
第三个选项用于杀死和强制关闭进入主屏幕的应用程序。
我知道我迟到了,但这就是我实现它的方式:在你想去其他片段/活动的片段中使用它。
@Override
public void onDetach() {
super.onDetach();
YourFragment pass = new YourFragment();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.container_body, pass)
.addToBackStack("Your Fragment")
.commit();
}
使用上述方法后,现在在您现在所在的位置使用此方法:
@Override
public void onResume() {
super.onResume();
if(getView() == null){
return;
}
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
Toast.makeText(getActivity(), "Exiting", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return true;
}
return false;
}
});
}