我开发了android应用程序,我在菜单选项中有Exit按钮。我想退出应用程序并按下退出按钮进入主屏幕。因为我用过 以下方法
1。System.exit(0)
2。finish()
3。android.os.Process.killProcess(android.os.Process.myPid())
4。System.runFinalizersOnExit(true);
这些所有方法直接应用到我的第一页不到主屏幕。那么我应该为此做些什么?请帮帮我
答案 0 :(得分:6)
首先在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 :(得分:3)
1)“退出”按钮是邪恶的。在Android中没有必要使用它们。用户按下或回家。让Android进行导航。
2)除非你有充分的理由并且知道自己在做什么,否则永远不要使用System.exit()。让Android做自己的应用程序管理。
3)只需使用finish()。这是关闭应用程序的文档化建议方式。
答案 2 :(得分:2)
要返回主屏幕,您可以使用以下代码:
// 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);
}
希望这有帮助!
答案 3 :(得分:1)
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();
答案 4 :(得分:1)
这个解决方案有一个黑客攻击。
使用方法startActivityForResult(intent, 1)
启动每个Activity并覆盖方法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);
现在你需要做的是你要退出应用程序的活动集
setResult(Activity.RESULT_CANCELED);
并调用onBackpress方法
onBackPressed();
希望这将有助于您解决问题。
答案 5 :(得分:0)
在所有情况下,使用第二选项即finish()
来杀死当前活动并开始另一种活动,即StartActivity(new intent(this, whichActicityUwant.class)); then call finish();
答案 6 :(得分:0)
我知道我来晚了,但这是我实现的目标: 在您要转到其他片段/活动的片段中使用它。
@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;
}
});
}