Serivce 啟動的兩種方式

1 篇文章 / 0 new
author
Serivce 啟動的兩種方式
startService()
當元件呼叫Context.startService(),系統會讀取被呼叫的Service(產生instance並執行其onCreate()),然後將client所傳進的intent帶入Service的onStartCommand(Intent, int, int)內。而service會一直執行,直到外部呼叫Context.stopService()或內部呼叫stopSelf()而停止。如果是在Service內使用stopSelf(int),可以確保 intent 有被處理了才會被停止。 對於已啟動的Service,如果需要有不同的Service執行模式,可以在override onStartCommand()時,設定不同的回傳值。回傳值常數已定義在Service Class內。
 
bindService()
Client可利用Context.bindService() 去建立與service的連線,如果建立連線時,還沒產生Service instance,會自動產生並呼叫執行onCreate。與startService不同的是接下來並不會呼叫onStartCommand。要執行bindService,首先要建立一個serviceConnection物件,把這conection物件當作參數放到bindService內讓Context與Service建立連線,Context.bindService(Intent service, ServiceConnection conn, int flags)flags參數預設是Context.BIND_AUTO_CREATE,也就是bind的時候會自動產生service。當連線成功後,會自動呼叫執行這個connection內的onServiceConnected(ComponentName className, IBinder service) function,在這function會接收到由service內的onBinde()所丟出來的Ibinder物件,利用這IBinder物件取得Service物件,就可以直接操作Service內各個public 的method

flow
reference :
http://developer.android.com/guide/components/services.html
http://developer.android.com/reference/android/app/Service.html
Free Web Hosting