如何退出应用程序,停止后台运行但不关闭服务

3
我一直在寻找一个解决方案来关闭安卓应用程序。 通过收集所有处理此问题的帖子,我最终建立了一个健康有效的解决方案,我想在这篇文章中分享。 如果我有任何错误,请纠正我。
public static void closeApp(Activity activity) {
    //Go to home to change main android view and focus
    //You can remove this part
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        activity.startActivity(intent);

    //finish in background many activities as possible
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        activity.finishAndRemoveTask();
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        activity.finishAffinity();
    } else {
        activity.finish();
    }

    //Kill all existing app process
    activity.moveTaskToBack(true);
    android.os.Process.killProcess(android.os.Process.myPid());

    //close the app
    System.exit(0);
}

使用示例

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            closeApp(MainActivity.this);
        }
    });
}

你是想为自己的应用程序做这个,还是为其他应用程序做呢? - Jawad Zeb
这个解决方案适用于我的应用程序。 - le Mandarin
那么你想做什么?你想关闭其他应用程序吗?还是你想关闭所有活动而不关闭服务。 - Jawad Zeb
这是一个解决方案,我花了5个月的时间才理解和开发它,所以我分享出来确保没有人会遇到这个错误。我想知道我的代码是否有问题。 - le Mandarin
这个解决方案关闭了应用程序并释放了资源。而且没有关闭服务,这对我来说非常好。是否存在隐藏的和意想不到的操作? - le Mandarin
显示剩余2条评论
1个回答

0

你所采用的方法在释放资源和完全关闭应用程序方面看起来相当全面。虽然我觉得有点过度,但如果这是你的使用情况要求,那就没有问题。你可以查看SO以获取更多见解。

我对以下行进行评论

停止应用程序的后台运行,但不关闭服务

android.os.Process.killProcess(android.os.Process.myPid());此方法将终止具有给定PID的进程。如果您的服务在此PID中运行,则它们也将被终止。

从Android O开始,由于对后台执行施加了几个限制,因此您无法在后台保持服务运行。当您的应用程序退出时,操作系统将终止服务,就像您调用了stopSelf()一样。因此,您将无法保持服务处于活动状态。


我使用这篇文章来防止服务停止:https://dev59.com/slsV5IYBdhLWcg3w0hpU#35915926 - le Mandarin
它是设备特定的。我观察到的最长持续时间是在三星手机上约为10分钟。在Google Pixel上,它不到1分钟。控制后台进程的关闭并不容易。 - Sagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接