Service服務

Service是Android的四大組件之一,用於長時間駐留在後臺進行操作;


他區別於線程,雖然在App中進行創建和綁定的,但是最終是在主線程裏運行的。

所以,一些耗時操作,如網絡請求,用戶輸入,音視頻播放等,最好是在Service的子線程中進行處理。

服務能被其他應用程序的組件啓動,既是用戶切換到另外的應用是還能保持後臺運行,此外程序組件還能

與服務綁定,並與服務進行交互,甚至能進行進程間通信,所有這些都是後臺進行的。


服務有兩種基本類型:

Started和Bound

Started是應用程序組件調用startService()來啓動服務,一旦啓動,服務就能在後臺一致運行下去,

既是啓動它的組件已經被銷燬了。通常,started的服務執行單一的操作並且不會像調用者返回結果。

Bound是通過一個應用程序組件調用BindService()綁定到服務上,則該服務就被bound可,bound服務提供了一個客戶端/服務器接口,允許組件與服務進行交互,發送請求,獲取結果,甚至可以利用進程間通信跨進程之賜你個操作。

多組件可以同事與一個服務綁定,不過所有的組件解除綁定後,服務也就被銷燬。

 服務的生命週期圖

11111

11111

 Service生命週期
Service有兩種啓動方式,一種是startService();一種是BindService();
第一種生命週期爲:onCreate()-》onStart()——》ServiceRunning--》(如果調用context。stopService())
onDestory()---》ServiceShutdown
如果在程序運行期間,又調用StartService(),那麼這個時候就不走onCreate()方法,而是直接走onStart()方法
第二種生命週期:onCreate()——》onBind()——》ServiceRunning——》onUnbind()——》onDistory——》ServiceStop
和上面一樣,如果運行期間調用了BindService(),那麼這個時候會走onBind方法,而不走onCreate();
區別:onBind將返回給客戶端一個IBind接口實例,IBind允許客戶端回調服務的方法,比如得到Service運行的狀態和其他操作,
這個時候調用者和Service是綁定在一起的,Context退出了,Service就會調用onUnbind()——》ondestory進行退出
也就是說BindService會吧Service和Activity進行綁定,一旦Activity銷燬,那麼隊形的服務也就銷燬了,
按HOME不會消失。


代碼實現

首先新建一個類Myservice繼承Service

public class MyService extends Service {
    final static String ACTION="com.baozilichao.android";
    private SimpleBind binder;

重寫方法

onCreate創建服務

onStartConnand啓動服務

onDestory銷燬服務

onBind綁定服務

onUnbind解除綁定

先在AndroidManifest中註冊服務

<service android:name=".MyService">
    <!--這個是進行服務啓動的時候的過濾的,啓動指定的服務-->
    <intent-filter>
        <action android:name="com.baozilichao.android"/>
    </intent-filter>
</service>
啓動服務時,調用方法啓動服務

startService(new Intent(MyService.ACTION));

停止服務

stopService(new Intent(MySrevice.ACTION));

綁定服務

首先:Intent intent=new Intent(MyService.ACTION);

聲明創建關聯的方法;

ServiceConntion sc=new ServiceConntion(){

public void onServiceConnected(ComponentName componentName,IBinder iBinder){

MyService.SimpleBind binder=(MyService.Simple)iBinder;}

在Myservice中自定義方法,這裏模擬從服務中獲取數據

class SimpleBind extends Binder {
        public String getString(){
            return "已獲得來自服務的一個數據";      }
在IBinder返回數據

調用方法綁定服務

BindService(intent,sc,BIND_AUTO_CREATE);

完成後綁定成功



發佈了35 篇原創文章 · 獲贊 33 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章