2010-07-13 46 views
15

所以我有我的活動,並按下「退出」按鈕我打電話給Activity.finish()。這有效地關閉了我的應用程序。如何殺死我自己的活動 - 難的方法

問題:我的應用程序的Dalvik進程仍然作爲一個殭屍在後臺左右。看起來這是正常的,因爲其他應用程序也是這樣。即使你好,世界的例子掛在內存..

我可以忍受這一點,但unfortunatley這種行爲使我的應用程序的發展很痛苦。我有一個遠程服務連接到我的活動,並且這個服務不會卸載,直到我的活動卸載(正如其所說的那樣)。

一切都以某種方式保持活着沒有很好的理由。

我怎樣才能真的從內存中刪除我的活動?

我正在尋找像Activity.finish_and_kill_my_process_please()調用或類似的東西。

回答

8

所以,我有我的活動,並在按下 一個「退出」按鈕,我叫 Activity.finish()。這有效地 關閉我的應用程序。

Please don't do this。我的應用程序 的

的Dalvik的過程仍是懸繞在 背景殭屍。

該進程保存在緩存中,供Android可能重用。你可以放心地忽略它。

我有連接到我的 活動遠程服務,而這種服務不會 卸載,直到我的活動卸載 (這是說,這不可能發生)。

你可能有一個錯誤在你的應用程序,如調用startService()並沒有打電話給stopService(),或致電bindService()並沒有打電話給unbindService()

6

嘗試使用killBackgroundProcesses方法:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
activityManager.killBackgroundProcesses("name.of.your.package"); 

您需要將KILL_BACKGROUND_PROCESSES允許添加到您的AndroidManifest.xml文件。

+0

好吧,看來這個方法不再是ActivityManager類的一部分? – bugzy 2011-02-03 22:17:06

+0

有一個適用於Android 2.2 Froyo的新API,但這是一個非常糟糕的主意。該權限被標記爲危險,用戶將看到您的應用有能力殺死其他應用。 – Tom 2012-07-30 20:53:21

+0

雖然終止應用程序的過程在開發過程中幾乎不是一個好主意,但這是一種不必要的迂迴方式。一個進程可以簡單地退出()或者自己終止 - 它不需要讓ActivityManager這麼做。 – 2015-05-21 13:06:17

24
  1. 致電finish();按鈕點擊
  2. 此行添加到的onDestroy方法:

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

public void onDestroy() { 
     super.onDestroy(); 
     android.os.Process.killProcess(android.os.Process.myPid()); 
    }  
+8

對於已發佈的應用程序KillProcess()不是一個好主意。但是對於開發階段(爲了調試目的而加速終止應用程序),這是一種挽救生命的方法。 +1。 – an00b 2011-05-25 00:45:54

+0

在開發時臨時使用(用於臨時使用) – Diljeet 2012-07-21 16:23:14

+1

這對於幫助我卸載本機庫十分有用:-) – Miquel 2012-09-07 14:17:15

3

殺死的過程中,你可以停止應用程序completely.from上後退按鈕按下最後一個屏幕,你可以殺死進程:

public void onBackPressed() { 
     super.onBackPressed(); 
     int pid = android.os.Process.myPid(); 
     android.os.Process.killProcess(pid); } 
0

通過使用ActivityManager我們可以關閉另一個應用也是。

private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
am.restartPackage("com.jimmy.appToBeClosed"); 

要使用上面的代碼,應該有清單文件中的android.permission.RESTART_PACKAGE權限。

+0

restartPackage現已被棄用。改用killBackgroundProcesses。 – rfinz 2012-07-05 18:58:35

4

好吧,如果不是唯一的活動,而且要終止應用程序,你可以使用

System.exit(0)

人們說,這是過時或壞的榜樣,但是,嗯,這是純粹的Java和不工作...

+0

你知道人們爲什麼這麼說嗎?它是否與應用程序在Android O.S.中「生活」有關?這很適合用在我的一個應用程序中......但我想首先知道灰心背後的理論。 – snapfractalpop 2012-04-05 02:35:42

+2

嗯,我認爲他們這樣說是因爲Android可以管理應用程序本身;所以我們不應該嗤之以鼻。我說這是蠢貨*但如果是我的申請,除了我以外還有誰可以知道什麼時候結束? :) – 2012-05-18 13:27:14

0

System.exit()的瞬間卸載整個虛擬機的所有本地庫,服務等

1

類似於System.exit(0),在Java端,你也可以調用本機方法在onD estroy在C/C++端調用exit(0)。這似乎迫使lib完全退出。它爲我工作!