Android Service學習總結(上)

2021-07-10 19:50:11 字數 2458 閱讀 5998

service:

基本用法:

啟動:在activity中通過 startservice(new intent(this, myservice.class))來進行啟動,首次啟動會呼叫myservice的oncreate()和onstartcommand()方法,非首次啟動,只會不斷的呼叫onstartcommand()方法。

停止:在activity中通過 stopservice(new intent(this, myservice.class))來進行停止,會呼叫myservice的ondestroy()方法。

繫結:繫結指的是將activity與service進行繫結,這樣activity就可以命令service做一些事情,而不是單純的喚醒service。

在activity中通過 bindservice(new intent(this, myservice.class),connection,bind_auto_create)來進行繫結。

接下來對該方法裡的引數逐一進行解釋:

connection是serviceconnection的乙個物件,我們可以看到,在serviceconnection裡有兩個方法,乙個是繫結關聯                 之後執行的onserviceconnected()方法,這樣可以在這裡呼叫myservice裡面的binder的子類mybinder的任何public方                   法,這樣就實現了activity去命令service做一些相關的操作。但是你不要就誤以為onservicedisconnected()方法就是在失                 聯之後呼叫的,這個方法只有在異常失聯的情況下才回去呼叫,正常的unbind並不會呼叫該方法。

bind_auto_create:在直接bindservice的情況下,先建立service.

解綁:解綁指的是將activity與service進行解綁。在activity當中通過unbindservice(connection)來進行解綁操作。

生命週期:

1、startservice - stopservice

oncreate - onstartcommand - ondestroy

2、bindservice - unbindservice

oncreate - ondestroy

3、startservice - bindservice - unbindservice/stopservice - stopservice/unbindservice

oncreate - onstartcommand - ondestroy

ps:service只有在停止工作的狀態同時與任何activity都沒有關聯的時候才會被銷毀。

service與thread:

service是執行在主線程,所以並不是非同步的子執行緒。但是如果在service裡面做太多的耗時操作也是會影響ui執行緒出現anr,所以我們可以在service裡面開新的執行緒去執行耗時的操作。

例如:

前台service:

防止系統因記憶體不夠,而對service進行**,或者需要將一些資訊一直展示給使用者看。

在郭神的部落格中,他是這樣寫的

但是在相對較後面的api裡面已經捨棄了new notification的用法,和setlatesteventinfo方法,我自己檢視原始碼解決如下:

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...

Android Service 啟動服務

你能夠通過把乙個intent物件 指定要啟動的服務 傳遞給startservice 方法,從乙個activity或其他的應用程式元件啟動服務。android系統呼叫服務的onstartcommand 方法,並且給它傳遞intent物件 你不應該直接呼叫onstartcommand 方法 例如,乙個a...