Android 编程下的四大组件之服务(Service)
服務(Service)?是一種在后臺運行,沒有界面的組件,由其他組件調用開始。Android?中的服務和?Windows?中的服務是類似的東西,它運行于系統中不容易被用戶發覺,可以使用它開發如監控之類的程序。
服務(Service)的實現
1. 定義類繼承?Service,重寫?onCreate()、 onStart(Intent?intent,?int?startId)、?onBind(Intent?intent)、 onUnbind(Intent?intent)、onDestroy()?中需要的方法。
2. 在清單文件的?<application>?節點下聲明?<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>服務不能自己運行,需要通過調 用?Context.startService()?或?Context.bindService()?方法啟動服務。這兩個方法都可以啟動?Service,但是它們的使用場合有所不同。使用?startService()?方法啟用服務,訪問者與服務之間沒有關聯,即使訪問者退出了,服務仍然運行。使用?bindService()?方法啟用服務,訪問者與服務綁定在了一起,訪問者一旦退出,服務也就終止。采用?Context.startService()?方法啟動服務,只能調用?Context.stopService()?方法結束服務,服務結束時會調用?onDestroy()?方法。【注意:服務的生命周期方法都是在主線程執行,所以不能直接在服務里面做耗時操作做,如果需要做耗時操作,應該在服務里面開啟子線程。】
通過?startService()?和?stopService(?) 啟動和關閉服務。適用于服務和訪問者之間沒有交互的情況。如果服務和訪問者之間需要方法調用或者傳遞參數,則需要使用?bindService()?和?unbindService()?方法綁定和解綁服務。
采用?Context.bindService()?方法啟動服務,在服務未被創建時,系統會先調用服務的?onCreate()?方法,接著調用?onBind()?方法,這個時候訪問者和服務綁定在一起。?如果訪問者要與服務進行通信,那么,onBind()?方法必須返回?Ibinder?對象。如果訪問者退出了,系統就會先調用服務的?onUnbind()?方法,接著調用?onDestroy()?方法。如果調用?bindService()?方法前服務已經被綁定,多次調用?bindService()?方法并不會導致多次創建服務及綁定(也就是 說?onCreate()?和?onBind()?方法并不會被多次調用)。如果訪問者希望與正在綁定的服務解除綁定,可以調用?unbindService()?方法,調用該方法也會導致系統調用服務的?onUnbind() → onDestroy()?方法。
服務(Service)的生命周期(服務的生命周期與啟動服務的方法有關)
- 當采用?Context.startService()?方法啟動服務,生命周期如下:
onCreate()?→ onStart()?→ onDestroy()
onCreate()?該方法在服務被創建時調用,該方法只會被調用一次,無論調用多少次?startService()?或 bindService()?方法,服務也只被創建一次。onStart()?只有采用?Context.startService()?方法啟動服務時才會回調該方法,該方法在服務開始運行時被調用。多次調用?startService()?方法盡管不會多次創建服務,但 onStart()?方法會被多次調用。onDestroy()?該方法在服務被終止時調用。
- 當采用?Context.bindService()?方法綁定服務,生命周期如下:
onCreate() → onBind() → onUnbind() → onDestroy()
onBind()?只有采用?Context.bindService()?方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已經綁定,多次調用?Context.bindService()?方法并不會導致該方法被多次調用。onUnbind()?只有采用?Context.bindService()?方法綁定服務后解綁服務時才會回調該方法。該方法在調用者與服務解除綁定時被調用。
- 如果先采用?startService()?方法啟動服務,然后調用?bindService()?方法綁定到服務,再調用?unbindService()?方法解除綁定,最后調用?bindService()?方法再次綁定到服務,生命周期如下:
onCreate()?→ onStart()?→ onBind()?→ onUnbind()[重載后的方法需返回true]?→ onRebind()
總結
以上是生活随笔為你收集整理的Android 编程下的四大组件之服务(Service)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mina学习之搭建项目工程目录
- 下一篇: Android中实时视频传输(摄像头实时