一、service概念及用途:
service 是 android 系統中的一種元件,它和activity 的級别差不多,但又activity不同,它是不能與使用者互動的,但可以和其他元件進行互動。它不能自己運作,隻能背景運作。
如果我們退出應用時,service程序并沒有結束,它仍然在背景運作,那我們什麼時候會用到service呢?比如我們播放音樂的時候,有可能想邊聽音樂邊幹些其他事情,當我們退出播放音樂的應用,如果不用service,我們就聽不到歌了,是以這時候就得用到service了,又比如當我們一個應用的資料是通過網絡擷取的,不同時間(一段時間)的資料是不同的這時候我們可以用service在背景定時更新,而不用每打開應用的時候在去擷取。
service生命周期:
android service的生命周期并不像activity那麼複雜,它隻繼承了oncreate(),onstart(),ondestroy()三個方法,當我們第一次啟動service時,先後調用了oncreate(),onstart()這兩個方法,當停止service時,則執行ondestroy()方法,這裡需要注意的是,如果service已經啟動了,當我們再次啟動service時,不會在執行oncreate()方法,而是直接執行onstart()方法,具體的可以看下面的執行個體。
service與activity通信:
service後端的資料最終還是要呈現在前端activity之上的,因為啟動service時,系統會重新開啟一個新的程序,這就涉及到不同程序間通信的問題了(aidl)這一節我不作過多描述,當我們想擷取啟動的service執行個體時,我們可以用到bindservice和onbindservice方法,它們分别執行了service中ibinder()和onunbind()方法。
二、service 啟動方式:
一、context.startservice();
二、context.bindservice();
使用service之前必須在androidmainfest.xml 中注冊
調用流程:
第一種:
啟動:context.startservice() ---> oncreate() ---> onstartcommand()
銷毀:ontext.stopservice() ---> ondestroy();
如果service還沒運作,則android會先調用oncreate()方法,然後再調用onstartcommand();
如果service已經運作了,則隻調用onstartcommand(),是以一個service的onstartcommand(),方法可能會調用多次。
第二種:
啟動:context.bindservice() ---> oncreate() --->onbind();
銷毀:onunibind() ---> ondestroy()
onbind() 将傳回給用戶端一個ibind接口執行個體,ibind允許用戶端調用服務的方法,比如得到service允許狀态或者其他操作這個時候調用者(context,例如activity)會和service綁定在一起,context退出了,service就會調用onunibind() ---> ondesytoy()相應退出
這就是android service的簡介