【问题标题】:Not able to kill 2 activities at the same time. why is that?无法同时杀死 2 个活动。这是为什么?
【发布时间】:2026-01-22 22:50:01
【问题描述】:

我试图在单击按钮时杀死 2 个活动。当前活动和上一个活动。使用他们的 pid。我只能杀死一项活动。为什么会这样?

public void onClick(View v) {

                android.os.Process.killProcess(pidofmain);
                android.os.Process.killProcess(android.os.Process.myPid());

                }

如果我在我的 logcat 中看到,带有 pid "pidofmain" 的活动被杀死,而当前活动没有被杀死。

"pidofmain" 是我使用 Intent 从上一个活动中收到的整数。

【问题讨论】:

  • 你为什么要杀死你自己的应用程序?你研究过finish() 方法吗?

标签: android pid


【解决方案1】:

将进程终止留给操作系统。这对于分时操作系统中的任何类型的程序都是不利的。如果你想节省内存或类似的东西,让操作系统来处理它。 您也无法真正知道该进程是否被正确终止,因为如果是,您将不知道,如果不是,您不应该这样做。 你想这样做是为了什么?

【讨论】:

    【解决方案2】:

    一个更好的方法是为当前活动调用finish()。如果上一个活动使用startActivityForResult(Intent) 调用当前活动,您还可以发出信号完成它。当前活动将在调用finish() 之前调用setResult(int) 以将返回码发送回前一个活动。之前的activity可以测试onActivityResult(int, int, Intent)中的返回码,也可以根据结果码调用finish()

    杀死进程应该留给操作系统。一旦活动完成,如果它需要资源,它将杀死它。否则它可以让它到处乱跑,如果用户想再次运行它,这可能有助于加快你的应用程序的重新启动。

    【讨论】:

      【解决方案3】:

      这不是一个确定的答案,但更像是我的一些想法,但我启动 Eclipse 并对其进行原型设计为时已晚。如果它没有帮助你让我知道,我会在明天晚上尝试更深入地调查它。
      一些想法(我希望他们有所帮助):
      1) Android 应用程序确实是单线程的,您的主要活动控制所有调度事件(包括我认为您创建的第二个线程的事件)。如果您终止主要活动,我很确定您的应用程序将在您第一次调用android.os.Process.killProcess(pidofmain) 后立即终止执行,并且您永远不会进行第二次调用,因为您会终止整个应用程序。同样,这是通过变量名称 pidofmain 假设您正在杀死主 UI 线程,而不仅仅是一个名为 main 的活动。
      2)我也有点好奇你从哪里得到 pidofmain?听起来你总共有三个活动,在第一个活动中你得到它的进程 ID 并将其发送到意图包中的第二个活动,它也被传递给第三个活动(这是你正在尝试的地方杀死这整件事)?如果是这种情况,并且您正试图终止当前正在运行的活动,那么此处文档中的表格让我相信您不能只使用相同的方法终止处于恢复状态的活动。 Official Android Docs for Activity您可能想尝试为您当前正在运行的活动调用 finish() 方法。

      您在 logcat 中究竟看到了什么? UI 中会发生什么?可见 Activity 是否继续运行,但其他 Activity 已从 backstack 中移除?

      【讨论】:

        最近更新 更多