2011-12-08 46 views
0

我試圖在onclick按鈕上殺死2個活動。當前活動和以前的活動。使用他們的pid。我只能殺死一項活動。爲什麼會發生?無法同時殺死2個活動。這是爲什麼?

public void onClick(View v) { 

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

       } 

如果我在logcat中看到,具有pid「pidofmain」活動爲被殺,而當前的活動是沒有得到殺害。

「pidofmain」是使用意圖從前一活動中接收到的整數。

+1

你爲什麼試圖殺死自己的應用程序?你看過'finish()'方法嗎? – Phil

回答

0

將進程殺死給OS。這對分時操作系統中的任何一種程序都是不利的。如果你想節省內存或類似的東西,讓操作系統處理它。 你也不能真正知道這個過程是否被正確地殺死,因爲如果它是你不知道,如果它不是你不應該這樣做。 你想爲此做什麼?

0

要做到這一點,更好的方法是撥打finish()進行當前活動。如果使用startActivityForResult(Intent)調用當前活動,您也可以指示以前的活動完成。在致電finish()將返回碼發送回先前的活動之前,當前活動將呼叫setResult(int)。以前的活動可以在onActivityResult(int, int, Intent)中測試返回代碼,並根據結果代碼調用finish()

殺戮進程應留給操作系統。一旦這些活動結束,如果它需要資源,它將把它殺掉。否則,它可以讓它繞過,如果用戶想再次運行它,這可能有助於加快應用程序的重新啓動速度。

0

這不是一個明確的答案,但更像是我的一些想法,但現在爲時已晚,無法啓動Eclipse並將其原型化。如果它沒有幫助你讓我知道,我會試着在明天晚上深入研究它。
一些想法(我希望他們有幫助):
1)Android應用程序確實是單線程的,並且您的主要活動控制着所有的調度事件(包括我認爲是您創建的第二個線程的事件) 。如果你殺了主要活動,我很確定你的應用程序會在第一次調用android.os.Process.killProcess(pidofmain)之後立即終止執行,並且你永遠不會接受第二個調用,因爲你會殺死整個應用程序。同樣,這是由變量名pidofmain假設你正在殺死主UI線程而不僅僅是一個名爲main的活動。
2)我也有點好奇你在哪裏得到pidofmain?這聽起來像是你總共有三個活動,並且在第一個活動中,你得到它的進程ID,並將它發送到第二個活動中的一個intent包,它也傳遞給第三個活動(這是你嘗試的地方殺死整個事情)?如果是這種情況,並且您試圖終止當前正在運行的活動,則此處文檔中的表格會讓我相信您不能使用相同的方法殺死處於恢復狀態的活動。 Official Android Docs for Activity您可能想要嘗試爲當前正在運行的活動調用finish()方法。

你在logcat中看到了什麼?而在用戶界面中會發生什麼?可見活動是否繼續運行,但其他活動是否已從堆棧中移除?