无法同时杀死2个活动。这是为什么?

时间:2011-12-08 07:52:55

标签: android pid

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

public void onClick(View v) {

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

                }

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

“pidofmain”是我使用意图从上一个活动收到的整数。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

杀戮过程应留给操作系统。一旦活动结束,如果需要资源,它将终止它。否则它可以让它绕过,如果用户想再次运行它,这可能有助于加快应用程序的重新启动。

答案 2 :(得分:0)

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

你在logcat中看到了什么?用户界面会发生什么?可见活动是否继续运行,但其他活动是否已从Backstack中删除?