2

我已经开发了 android 应用程序,菜单选项中有退出按钮。我想要退出应用程序并在按下退出按钮时进入主屏幕。为此,我使用了以下方法

1.System.exit(0)

2.finish()

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

4.System.runFinalizersOnExit(true);

这些所有方法都直接应用到我的第一页而不是主屏幕。那么我该怎么做呢?请帮我

4

7 回答 7

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();
    }
于 2012-10-10T07:07:40.737 回答
3

1)“退出”按钮是邪恶的。Android 中不需要它们。用户按下返回或主页。让安卓做导航。

2)永远不要使用 System.exit() 除非你有很好的理由并且你知道你在做什么。让 Android 做它自己的应用程序管理。

3)只需使用finish()。这是关闭应用程序的文档化推荐方式。

于 2012-10-10T07:07:08.537 回答
3

为了返回主屏幕,您可以使用以下代码:

// 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);
    }

希望这可以帮助!

于 2012-10-10T07:15:12.593 回答
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();
于 2012-10-10T07:21:36.207 回答
1

这个解决方案有一个 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();

希望这将帮助您并解决您的问题。

于 2012-10-10T07:51:05.847 回答
0

在所有情况下,使用第二个选项,即finish()终止当前活动并开始另一个活动,即StartActivity(new intent(this, whichActicityUwant.class)); then call finish();

第三个选项用于杀死强制关闭进入主屏幕的应用程序。

于 2012-10-10T07:13:10.143 回答
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;
            }
        });
    }
于 2019-07-08T11:22:47.627 回答