通過startService開啟的服務(wù),當(dāng)訪問者關(guān)閉時(shí),服務(wù)仍然存在;訪問者需要與服務(wù)進(jìn)行通信,則我們需要將訪問者與服務(wù)進(jìn)行綁定;
創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、微信平臺(tái)小程序開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!如果使用Context.bindService()方法啟動(dòng)服務(wù),則在服務(wù)未創(chuàng)建時(shí),系統(tǒng)會(huì)調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onBind()方法,這時(shí)就訪問者與服務(wù)已經(jīng)綁定了,主程序銷毀時(shí)服務(wù)也會(huì)終止。
1)綁定服務(wù)時(shí),會(huì)自動(dòng)創(chuàng)建服務(wù)。
2)如果創(chuàng)建后并啟動(dòng)后再綁定,不會(huì)重新創(chuàng)建,一個(gè)Service只有一個(gè)實(shí)例
3)同時(shí)啟動(dòng)和綁定服務(wù)時(shí),解除綁定服務(wù),但不會(huì)銷毀關(guān)閉服務(wù)的,必須解除綁定并停止服務(wù)。
4)通過StartService啟動(dòng)服務(wù),當(dāng)前Activity銷毀,服務(wù)不會(huì)停止,通過BindService啟動(dòng)服務(wù),當(dāng)前Activity銷毀,服務(wù)停止。
綁定與解綁定服務(wù)
(1)Context.bindService(Intent service,ServiceConnectionconn,BIND_AUTO_CREATE);//綁定服務(wù)
(2)Context.unbindService(ServiceConnectionconn);
ServiceConnection
ServiceConnection為一個(gè)接口,用于綁定和解綁定IBinder,因此需要?jiǎng)?chuàng)建一個(gè)類實(shí)現(xiàn)它;
class XxxServiceConnectionimplements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//service為在onBind返回的IBinder
//綁定Binder對(duì)象
}
@Override
public void onServiceDisconnected(ComponentName name) {
//解綁定Binder對(duì)象
}
}
Service類
class XxxService extendsService{
private IBinder binder = new
XxxBinder();
public IBinderonBind(Intent intent){
return binder;
}
public int fun(int a){
//服務(wù)提供的方法,但是不能直接調(diào)用
...
}
private class XxxBinderextends Binder implements IXxxBinder{
//面向接口編程
public return fun1(int a){
//對(duì)外暴露的API
returnfun(a);
//內(nèi)部調(diào)用Service的方法
}
}
}
案例:綁定服務(wù)
主要功能:Service實(shí)現(xiàn)不斷輸出1、2、3……的服務(wù)功能,Activity調(diào)用Service的公開方法,調(diào)出當(dāng)時(shí)的一個(gè)值。繼續(xù)上次服務(wù)的案例,增加綁定等功能。
打開activity_main.xml,添加兩個(gè)命令按鈕,綁定服務(wù)和解除綁定: