【问题标题】:How can I programmatically force stop an Android app with Java?如何以编程方式强制停止使用 Java 的 Android 应用程序?
【发布时间】:2015-07-05 09:58:16
【问题描述】:

如何使用 Java 强制停止应用程序?我正在尝试构建一个可以帮助清理后台进程的内存清理器。

我知道有一种方法可以杀死应用程序的进程,但是当您进入运行列表时,即使您杀死了该应用程序,它仍然存在。而且我尝试过很多类似的内存清理应用,只有一个可以完全强制停止应用,但它有很多无用的通知 - 非常烦人。

P.S.:当你进入设置 -> 应用程序时,你会看到一个应用程序列表。单击其中一个应用程序,您最终会看到该应用程序的信息。有一个名为“强制停止”的按钮。通过单击它,该应用程序将被杀死。我想在我的应用程序中执行这种操作。如何做到这一点?

【问题讨论】:

标签: java android process


【解决方案1】:

获取应用程序的进程 ID,并在 onDestroy() 方法中终止该进程

@Override
public void onDestroy()
 {
    super.onDestroy();

    int id= android.os.Process.myPid();
    android.os.Process.killProcess(id);
 }

getActivity().finish();
System.exit(0);

如果你想从你的活动中杀死其他应用程序,那么这应该可以工作

您可以使用以下方式发送信号:

Process.sendSignal(pid, Process.SIGNAL_KILL);

要彻底杀死进程,建议调用:

ActivityManager.killBackgroundProcesses(packageNameToKill)

在发送信号之前。

请注意,您的应用需要拥有 KILL_BACKGROUND_PROCESSES 权限。因此,在 AndroidManifest.xml 中,您需要包含:

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

【讨论】:

  • 这样可以杀死其他应用吗?你能显示更多的sn-ps吗?谢谢!
  • 这会杀死你的应用,而不是其他应用。
  • 来自 Android M ,您无法停止其他应用进程。这完全取决于 Android 操作系统(除非您有 root 访问权限)。
  • 请注意,如果您在调用System.exit(0) 之后调用System.exit(0),那么调用#finish() 将几乎没有效果。因此,如果您真的想强制退出,请在其他地方等待onDestroy() 回调(例如......在应用程序类中监听生命周期事件)。但还要注意,所有这些终止方法都非常激进,如果您在创建服务时将其标记为STICKYProcess 调用都会重新启动服务。
  • 据我所知,如果在任务堆栈上有多个活动时发生这种情况,Android 将重新启动应用程序,并调出下一个较低的活动 - 即使所有这些脚步。换句话说,从任务堆栈的角度来看,它就像您刚刚对当前活动执行了完成()一样。
【解决方案2】:

尝试使用以下代码

    finish(); // for stopping Current Activity

    // add this line for Removing Force Close

    @Override
        protected void onDestroy() {
    // closing Entire Application
            android.os.Process.killProcess(android.os.Process.myPid());
            super.onDestroy();
        }
    }

这个解决方案可能会帮助你Force Close an app programmatically

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多