Android 编程下的四大组件之服务(Service)
服務(wù)(Service)?是一種在后臺(tái)運(yùn)行,沒有界面的組件,由其他組件調(diào)用開始。Android?中的服務(wù)和?Windows?中的服務(wù)是類似的東西,它運(yùn)行于系統(tǒng)中不容易被用戶發(fā)覺,可以使用它開發(fā)如監(jiān)控之類的程序。
服務(wù)(Service)的實(shí)現(xiàn)
1. 定義類繼承?Service,重寫?onCreate()、 onStart(Intent?intent,?int?startId)、?onBind(Intent?intent)、 onUnbind(Intent?intent)、onDestroy()?中需要的方法。
2. 在清單文件的?<application>?節(jié)點(diǎn)下聲明?<service>。
<applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/title_activity_main" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name=".MyService" ></service> </application>服務(wù)不能自己運(yùn)行,需要通過(guò)調(diào) 用?Context.startService()?或?Context.bindService()?方法啟動(dòng)服務(wù)。這兩個(gè)方法都可以啟動(dòng)?Service,但是它們的使用場(chǎng)合有所不同。使用?startService()?方法啟用服務(wù),訪問(wèn)者與服務(wù)之間沒有關(guān)聯(lián),即使訪問(wèn)者退出了,服務(wù)仍然運(yùn)行。使用?bindService()?方法啟用服務(wù),訪問(wèn)者與服務(wù)綁定在了一起,訪問(wèn)者一旦退出,服務(wù)也就終止。采用?Context.startService()?方法啟動(dòng)服務(wù),只能調(diào)用?Context.stopService()?方法結(jié)束服務(wù),服務(wù)結(jié)束時(shí)會(huì)調(diào)用?onDestroy()?方法。【注意:服務(wù)的生命周期方法都是在主線程執(zhí)行,所以不能直接在服務(wù)里面做耗時(shí)操作做,如果需要做耗時(shí)操作,應(yīng)該在服務(wù)里面開啟子線程。】
通過(guò)?startService()?和?stopService(?) 啟動(dòng)和關(guān)閉服務(wù)。適用于服務(wù)和訪問(wèn)者之間沒有交互的情況。如果服務(wù)和訪問(wèn)者之間需要方法調(diào)用或者傳遞參數(shù),則需要使用?bindService()?和?unbindService()?方法綁定和解綁服務(wù)。
采用?Context.bindService()?方法啟動(dòng)服務(wù),在服務(wù)未被創(chuàng)建時(shí),系統(tǒng)會(huì)先調(diào)用服務(wù)的?onCreate()?方法,接著調(diào)用?onBind()?方法,這個(gè)時(shí)候訪問(wèn)者和服務(wù)綁定在一起。?如果訪問(wèn)者要與服務(wù)進(jìn)行通信,那么,onBind()?方法必須返回?Ibinder?對(duì)象。如果訪問(wèn)者退出了,系統(tǒng)就會(huì)先調(diào)用服務(wù)的?onUnbind()?方法,接著調(diào)用?onDestroy()?方法。如果調(diào)用?bindService()?方法前服務(wù)已經(jīng)被綁定,多次調(diào)用?bindService()?方法并不會(huì)導(dǎo)致多次創(chuàng)建服務(wù)及綁定(也就是 說(shuō)?onCreate()?和?onBind()?方法并不會(huì)被多次調(diào)用)。如果訪問(wèn)者希望與正在綁定的服務(wù)解除綁定,可以調(diào)用?unbindService()?方法,調(diào)用該方法也會(huì)導(dǎo)致系統(tǒng)調(diào)用服務(wù)的?onUnbind() → onDestroy()?方法。
服務(wù)(Service)的生命周期(服務(wù)的生命周期與啟動(dòng)服務(wù)的方法有關(guān))
- 當(dāng)采用?Context.startService()?方法啟動(dòng)服務(wù),生命周期如下:
onCreate()?→ onStart()?→ onDestroy()
onCreate()?該方法在服務(wù)被創(chuàng)建時(shí)調(diào)用,該方法只會(huì)被調(diào)用一次,無(wú)論調(diào)用多少次?startService()?或 bindService()?方法,服務(wù)也只被創(chuàng)建一次。onStart()?只有采用?Context.startService()?方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法,該方法在服務(wù)開始運(yùn)行時(shí)被調(diào)用。多次調(diào)用?startService()?方法盡管不會(huì)多次創(chuàng)建服務(wù),但 onStart()?方法會(huì)被多次調(diào)用。onDestroy()?該方法在服務(wù)被終止時(shí)調(diào)用。
- 當(dāng)采用?Context.bindService()?方法綁定服務(wù),生命周期如下:
onCreate() → onBind() → onUnbind() → onDestroy()
onBind()?只有采用?Context.bindService()?方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與服務(wù)綁定時(shí)被調(diào)用,當(dāng)調(diào)用者與服務(wù)已經(jīng)綁定,多次調(diào)用?Context.bindService()?方法并不會(huì)導(dǎo)致該方法被多次調(diào)用。onUnbind()?只有采用?Context.bindService()?方法綁定服務(wù)后解綁服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與服務(wù)解除綁定時(shí)被調(diào)用。
- 如果先采用?startService()?方法啟動(dòng)服務(wù),然后調(diào)用?bindService()?方法綁定到服務(wù),再調(diào)用?unbindService()?方法解除綁定,最后調(diào)用?bindService()?方法再次綁定到服務(wù),生命周期如下:
onCreate()?→ onStart()?→ onBind()?→ onUnbind()[重載后的方法需返回true]?→ onRebind()
總結(jié)
以上是生活随笔為你收集整理的Android 编程下的四大组件之服务(Service)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Mina学习之搭建项目工程目录
- 下一篇: Atitit.web预览播放视频的总结