Inter Process Communication,IPC(程序間通信,吼吼。),它可以用于解決兩個不同Android應用程式程序之間的調用和通信問題。
Service生命周期 :
調用startService()啟動Service --> onCreate() --> onStart() --> Service正在運作-->Sercice被停止-->onDestroy()--> 關閉Service
<a target="_blank" href="http://blog.51cto.com/attachment/201112/194243654.png"></a>
使用方式有兩種 :
1.啟動方式(不能擷取Service對象,無法調用Service中的方法)
1.1:Context.startService()啟動Servide
1.2:Context.stopService()終止Service或Service.stopSefl()停止Service
1.3:1.2中的終止并未真正終止,除非它所在的Activity調用onDestroy()才算真正終止
2.綁定方式(能擷取Service對象,可以調用Service中的方法,通過Connection實作)
2.1:Context.bindService()建立服務連結
2.2:Context.unbindService()終止連結
最主要的是:同一個Service可以綁定多個服務連結,這樣可以同時為多個不同的元件提供服務
例:播放MP3暫停
Context.startService();啟動服務
Context.bindService();擷取Service對象儲存播放資訊,再用:暫停函數暫停播放
需要注意的是:在此情況下如何調用Context.stopService()終止播放的話并不能停止Service,需要在所有的服務連結關閉後,Service才能真正停止
Intent廣播消息時候要有一個唯一辨別,此處,Service在全局檔案中注冊時也要一個唯一辨別
<service android:name=".繼承Service的類名">
代碼實作Service後有兩種方式啟動服務:顯式啟動和隐式啟動
1.顯式啟動:
final Intent serviceIntent = new Intent(this,繼承Service的類名.class);
startService(serviceIntent);
2.隐式啟動:
final Intent serviceIntent = new Intent();
serviceIntent.setAction("繼承Service的類_完整路徑");
<intent-filter>
<action android:name="繼承Service的類_完整路徑"/>
</intent-filter>
</service>
無論何種方式 :關閉方式都一樣的:stopService(serviceIntent);……………….吼吼
bindService:
建立一個能提供綁定服務的功能時,必須提供一個IBinder對象,吼吼,用戶端能用這個對象與服務互動,定義方式有三種:
1.擴充Binder類
1.1:在Service類中,建立一個Binder執行個體,包含用戶端使用的公共方法,傳回目前服務對象
1.2:在onBinder()方法中傳回Binder執行個體
1.3:在用戶端,從onServiceConnected()方法中取得Binder執行個體
2.使用Message
3.使用AIDL(Android Interface Definitation Language)
服務啟動之後是運作在主線程之中的,輸入日志中可以直接取線程資訊:(Log.i(“TAG”,Thread.getCurrentThread.getId());)
在Service裡面處理比較耗時的事件用多線程即可解決的,但在Android中系統提供了一個IntentService來專門處理異步請求,客戶通過調用startService(Intent )方法傳遞請求給IntentService,IntentService再通過 worker Thread來處理每個Intent對象,執行完以後會自動停止此Service…..吼吼。。有隊列使用哦
步驟如下:
1.寫構造方法
2.複寫onHandleIntent()方法。
本文轉自華華世界 51CTO部落格,原文連結:
http://blog.51cto.com/mzh3344258/733364
,如需轉載請自行聯系原作者