service是不可見的,它的啟動(dòng)、停止和其他控制操作都是通過(guò)其他應(yīng)用程序組件來(lái)實(shí)現(xiàn)的。
比如最簡(jiǎn)單的就是在activity中使用startService()來(lái)啟動(dòng)一個(gè)服務(wù),使其在后臺(tái)運(yùn)行。但如果僅僅是這樣的話,我們啟動(dòng)一個(gè)service后就只能看著它在后臺(tái)運(yùn)行卻不能對(duì)其進(jìn)行任何操作了。如果想在activity中能夠操作service(調(diào)用其中的某些方法,讓其完成某些動(dòng)作),我們就必須先把a(bǔ)ctivity和service綁定起來(lái)。
如何綁定activity和service?這需要我們實(shí)現(xiàn)service中的onBind()函數(shù)以返回service實(shí)例給activity
在service這個(gè)類中,定義一個(gè)內(nèi)部類繼承自Binder
public?class?MyBinder?extends?Binder{??
public MyService getService(){??
return?MyService?.this;??
????????}??
????} ?
private?final?IBinder?binder?=?newMyBinder();?
然后重寫MyService 的onBind()方法。
@Override??
public?IBinder?onBind(Intent?intent)?{??
Log.i(LOG,"onBind............");??
return?binder;??
????}?
這樣,就在onBind()方法中獲取到binder對(duì)象,進(jìn)而可以獲取到MyBinder中的getService,獲取到Service的實(shí)例對(duì)象。
在activity中bindservice()的時(shí)候,就可以在ServiceConnection 中獲取到service的實(shí)例。就實(shí)現(xiàn)了activity中獲取到service的實(shí)例對(duì)象。就可以調(diào)用service中的方法。