如何讓自己的Android程式永不被系統kill

2021-09-06 18:21:42 字數 2961 閱讀 3097

一般來說,在android

系統中,當某程序較長時間不活動,或系統資源比較緊時,該程序可能被系統

kill

掉,以此來**一些資源。

android

系統會根據程序的優先順序來選擇性地殺死一些程序,優先順序從高到低依次是:

1. 前台程序(foreground process)

2. 可視程序(visible process)

3. 服務程序(service process)

4. 後台程序(background process)

5. 空程序(empty process)

1. 前台程序(

foreground process

)是指當前的活動程序,即那些有視窗、控制項的,正與使用者進行互動的應用程式程序。

android

會努力嘗試從其它程序**系統資源來保持其響應。

2. 可見程序(

visible process

)是指那些可見的活動程序,但是當前它不在前台執行,不能對使用者事件作出反映。比如乙個程式

a正在前台執行,接著又啟動了另乙個程式

b,程式

b的視窗把程式

a的視窗完全或部分遮擋,那麼,程式

a現在就屬於可見程序了。一般來說,只有在系統資源十分缺乏的情況下,為了保證活動程序的執行,系統才會終止它。

3. 服務程序(

service process

)是指那些沒有可見介面的程序,它們不能直接與使用者進行互動。前台程序(通常是乙個

activity

)變為非活動時,會暫停執行;但服務程序可在後台保持執行,因此如果要保持程序在轉到後台後也能執行,就必需啟動乙個

service

。但是一旦前台程序需要資源時,

service

就很容易被系統給

kill

掉。通常,預設情況下

service

被kill

掉後會自動重啟,但是重啟後並不能保證恢復先前的環境;如果不需要

service

自動重啟,呼叫

stopself()

函式即可。

4. 後台程序(

background process

)是指不可見的,且沒有任何正在執行的服務的活動的程序。通常後台程序會比較多,

android

將按「最後乙個被看到,第乙個終止」的方式來終止它們,從而為前台程序提供資源。

5. 對於空程序,

android

為了提高系統的整體效能,經常在在應用程式的生存期結束後仍然把它們儲存在記憶體中,當該程式被再次啟動時,可以加快啟動速度。這類程序會根據需要被定期終止。

由上可知,要想自己所寫的service

不輕易被系統在**資源時

kill

掉,正常的做法是盡量提高程式的優先順序,如呼叫

startforeground(true)

。因為service

啟動時預設被標記為

background

,當前執行的

activity

被標記為

foreground

,當將service

設定為foreground

後,它的優先順序就與正在執行的

activity

類似,但是這也不能保證它不被系統

kill。

如果我們要寫乙個監控程式,監測其它程式的執行,那麼該怎麼辦呢?我們必需保證我們的程式不會因**資源而kill

。顯然,優先順序為

2-5的程序都不可靠,作為監控程式,其優先順序也不可能為1。

這樣看上去,貌似沒有辦法了……別急,繼續看下面……

解決方法:

簡單地說,就是將自己寫的service

變成core service

,即將自己寫的程式提公升為系統級別的程式,這樣在任何情況下它都不會被

kill掉。

要想自己寫的service

提公升為core service

,應用程式需要設定兩個標誌:

flag_persistent

和flag_system。

具體做法如下:

1. 設定flag_persistent

:在androidmanifest.xml

檔案中,加入android:persistent="true" ;

2. 設定

flag_system

:將你寫的應用程式放到

目錄下即可。具體操作如下:

a. 使用

cygwin

或cmd

進入你工程所在的

bin目錄中,然後執行如下兩條命令:

adb remount

命令adb remount

是為了獲取系統目錄的臨時操作許可權,然後使用

push

命令將自己寫的程式包上傳到系統應用程式目錄中。

b. 重啟手機。開機後,在應用列表中就可以看到你寫的程式了。

需要說明的是:系統程式不能像非系統程式那樣使用adb install yourpackage.apk

來安裝apk

包,我們只需要將

apk包拷貝到

目錄下重啟即可。如果使用

adb install

的方式,那麼

flag_system

標誌不會被設定,

flag_persistent

標誌也將不起任何作用。

c. 如果需要解除安裝自己寫的系統應用程式,可執行如下命令:

adb remount

另外,還需要說明的是,如果想在模擬器中加入自己寫的系統級應用程式,好像不行,因為將apk

複製到下後,還必需重啟,但模擬器一重啟,系統目錄也將恢復初始狀態。不過網上好像有人做到了,方法也很簡單,就是將

android

原始碼相應地方稍改下,然後重新編譯……

現在,我們就可以讓我們的程式為所欲為了~

如何讓自己的Android程式永不被系統kill

相關知識 一般來說,在android 系統中,當某程序較長時間不活動,或系統資源比較緊時,該程序可能被系統 kill 掉,以此來 一些資源。android 系統會根據程序的優先順序來選擇性地殺死一些程序,優先順序從高到低依次是 1.前台程序 foreground process 2.可視程序 vis...

如何讓自己時刻冷靜的方法 如何讓自己保持冷靜?

作為平常人的我們,擁有喜怒哀樂等各種情緒是天經地義的事情,這好像一點問題都沒有。若真要說有什麼問題。應該是在於這些情緒的持續時間。不只是負面情感,快樂之類的正面情緒持續太久也會使的人得意忘形。同樣不是什麼好事。事實上,大部分人經歷過這類教訓,都認同 過於衝動只會壞事 的道理。但另一方面,我們也為自己...

如何讓自己快樂!

今天 心情 不是 很好,想 了好多方法,下面的方法 還是不錯的 solution 1 做乙個可愛的人。放飛自己的心情,不埋怨誰,不嘲笑誰,也不羨慕誰,陽光下燦爛,風雨中奔跑,做自己的夢,走自己的路!按自己的思路去做事,心情自然會好。10部能帶給你無盡勇氣的電影 聽見天堂 追夢女孩 陽光小美女 聞香識...