android 系統對于記憶體管理有自己的一套方法,為了保障系統有序穩定的運信,系統内部會自動配置設定,控制程式的記憶體使用。當系統覺得目前的資源非常有限的時候,為了保 證一些優先級高的程式能運作,就會殺掉一些他認為不重要的程式或者服務來釋放記憶體。這樣就能保證真正對使用者有用的程式仍然再運作。如果你的 service 碰上了這種情況,多半會先被殺掉。但如果你增加 service 的優先級就能讓他多留一會,我們可以用 setforeground(true) 來設定 service 的優先級。
為什麼是 foreground ? 預設啟動的 service 是被标記為 background,目前運作的 activity 一般被标記為 foreground,也就是說你給 service 設定了 foreground 那麼他就和正在運作的 activity 類似優先級得到了一定的提高。當讓這并不能保證你得 service 永遠不被殺掉,隻是提高了他的優先級。
從android 1.5開始,一個已啟動的service可以調用startforeground(int, notification)将service置為foreground狀态,調用stopforeground(boolean)将service置為 background狀态。
我們會在調用startforeground(int, notification)傳入參數notification,它會在狀态欄裡顯示正在進行的foreground service。background service不會在狀态欄裡顯示。
在android 1.0中,将一個service置為foreground狀态:
setforeground(true);
mnm.notify(id, notification);
将一個service置為background狀态:
mnm.cancel(id);
setforeground(false);
對比看出,在1.0 api中調用setforeground(boolean)隻是簡單的改變service的狀态,使用者不會有任何覺察。新api中強制将 notification和改變service狀态的動作綁定起來,foreground service會在狀态欄顯示,而background service不會。
remote service controller & binding
跨程序調用service。暫時不研究。