Android应用程序退出主屏幕

时间:2012-10-10 07:02:02

标签: android process exit kill

我开发了android应用程序,我在菜单选项中有Exit按钮。我想退出应用程序并按下退出按钮进入主屏幕。因为我用过 以下方法

1。System.exit(0)

2。finish()

3。android.os.Process.killProcess(android.os.Process.myPid())

4。System.runFinalizersOnExit(true);

这些所有方法直接应用到我的第一页不到主屏幕。那么我应该为此做些什么?请帮帮我

7 个答案:

答案 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;
            }
        });
    }