這篇文章主要介紹了android service 服務不被殺死的妙招的相關資料,需要的朋友可以參考下
service是android 系統中的一種元件,它跟activity的級別差不多,但是他不能自己執行,只能後台執行,並且可以和其他元件進行互動。
android開發的過程中,每次呼叫startservice(intent)的時候,都會呼叫該service物件的onstartcommand(intent,int,int)方法,然後在onstartcommand方法中做一些處理。
從android官方文件中,我們知道onstartcommand有4種int返回值,首先簡單地講講int返回值的作用。
一、onstartcommand有4種返回值:
start_sticky:如果service程序被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent物件。隨後系統會嘗試重新建立service,由於服務狀態為開始狀態,所以建立服務後一定會呼叫onstartcommand(intent,int,int)方法。如果在此期間沒有任何啟動命令被傳遞到service,那麼引數intent將為null。
start_not_sticky:「非粘性的」。使用這個返回值時,如果在執行完onstartcommand後,服務被異常kill掉,系統不會自動重啟該服務。
start_redeliver_intent:重傳intent。使用這個返回值時,如果在執行完onstartcommand後,服務被異常kill掉,系統會自動重啟該服務,並將intent的值傳入。
start_sticky_compatibility:start_sticky的相容版本,但不保證服務被kill後一定能重啟。
二、建立不被殺死的service
1.在service中重寫下面的方法,這個方法有三個返回值, start_sticky(或start_sticky_compatibility)是service被kill掉後自動重寫建立?
1
2
3
4
5
6
@override
public
int
onstartcommand(intent intent,
int
flags,
int
startid)
或?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@override
public
int
onstartcommand(intent intent,
int
flags,
int
startid)
@override
public
void
onstart(intent intent,
int
startid)
2.在service的ondestroy()中重啟service.?
12
3
4
5
6
public
void
ondestroy()
3.建立乙個廣播?
12
3
4
5
6
7
8
public
class
myreceiver
extends
broadcastreceiver
}
4.androidmanifest.xml中註冊廣播myreceiver及myservice服務?
12
3
4
5
6
7
8
9
10
11
注:解鎖,啟動,切換場景啟用廣播需加許可權,如啟動完成,及手機機狀態等。 ?
12
kill問題:
1. settings 中stop service
ondestroy方法中,呼叫startservice進行service的重啟。
2.settings中force stop 應用
捕捉系統進行廣播(action為android.intent.action.package_restarted)
3. 借助第三方應用kill掉running task?
1
2
3
4
5
6
android:persistent=
"true"
android:label=
"@string/dialericonlabel"
android:icon=
"@drawable/ic_launcher_phone"
>
...
Android Service 在前台執行服務
前台服務是哪些被認為使用者知道的並且在記憶體低的時候不允許系統殺死的服務。前台服務必須給狀態列提供乙個通知,他被放到了 正在進行中 ongoing 標題之下,這就意味著直到這個服務被終止或從前台刪除通知才能被解除。要讓你的服務在前台執行,需要呼叫startforeground 方法,這個方法需要兩個...
Android Service簡單總結
分兩種 local service 不少人又稱之為 本地服務 是指client service同處於乙個程序 remote service 又稱之為 遠端服務 一般是指service處於單獨的乙個程序中 remote service 常用的有兩種實現 messenger 信使 使用廣播通訊,serv...
Android Service相關知識
public void oncreate l.d wmodel.time,oncreate耗時 system.currenttimemillis s1 public static string getprocessname context cxt,int pid if procinfo.pid pi...