【问题标题】:Android App Exit on Back ButtonAndroid 应用程序退出按钮
【发布时间】:2016-10-04 18:33:10
【问题描述】:

我试图在触摸后退按钮时退出我的应用程序。我使用了通常的代码,但它只从屏幕中取出应用程序,当我点击右下角的方框时(也告诉我它叫什么),我仍然可以看到应用程序在运行我想要删除的背景它完全来自系统。 我已经尝试了所有这些完成();和 System.exit(0);他们只是将应用程序从前台传递到后台。我想将它从系统中彻底删除。

下面是我正在使用的代码。

@Override
public void onBackPressed() {

        new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure?")
                .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(Intent.ACTION_MAIN);
                        intent.addCategory(Intent.CATEGORY_HOME);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                        finish();
                        System.exit(0);
                    }
                }).setNegativeButton("no", null).show();

    }

【问题讨论】:

  • 这些给出的答案与 finish();或 System.exit(0);它不起作用,它只是将我的应用程序置于后台。我可以通过向右滑动来手动将其从后台应用程序中删除。
  • 是的,我都试过了,finish();和 System.exit(0);他们只是将应用程序从前台传递到后台。我想从系统中完全删除它。 @VolodymyrKhodonovych

标签: android android-studio


【解决方案1】:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 将清除以前的活动。使用它,finish() 呼叫将是不必要的。

而且System.exit(0);用在java中,不是android,所以不要再用这个了。在片段中使用finish()getActivity().finish() 关闭当前活动。

更新:

如果你想杀死应用程序以便不再在后台运行,你需要做这样的事情

ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE); am.killBackgroundProcesses(packageName);

其中 packagename 是您的应用程序包。并且您需要提供权限<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />。我认为这需要在 M 上请求。试试看。

【讨论】:

  • 只是将它从前台带到后台是行不通的。
  • 请删除您的其他标志。
  • 意图意图=新意图(意图.ACTION_MAIN);意图.addCategory(意图.CATEGORY_HOME); //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);意图.setFlags(意图.FLAG_ACTIVITY_CLEAR_TOP);开始活动(意图);完成();
  • 我尝试了所有其他应用程序,除非您手动向右滑动,否则没有应用程序会完全关闭。我认为没有完全的退出功能..
  • 无论如何.. 这不是一个好主意,你想做什么。很高兴。
【解决方案2】:

如果你想从主要活动中退出应用程序,你可以写:

finish();

或从其他活动中退出应用程序,您应该在其他活动中这样做:

    //in other activity onBackPressed()     
    Intent intent = new Intent(OtherActivity.this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("EXIT", true);
    startActivity(intent);

并在 MainActivity 的 onCreate() 中写入

 if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        System.exit(0);
    }

这对我有用,我希望它也对你有用。

【讨论】:

  • 不要使用System.exit(0)。只需finish()。这是 Android,不是 java。
  • finish() - 完成调用它的活动,然后您会看到上一个活动。 System.exit(0) - 重新启动应用程序,堆栈上的活动少了一个。因此,如果您从 ActivityA 调用 ActivityB,并且在 ActivityB 中调用 System.exit(0),则应用程序将被终止并立即启动,只有一个活动 ActivityA
  • 只是将它从前台带到后台是行不通的。
  • 这就是每次都发生的事情......!
猜你喜欢
  • 2014-01-02
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多