bindService

bindService用於綁定一個服務。當bindService(intent,conn,flags)後,就會綁定一個服務。這樣做可以獲得這個服務對象本身,而用startService(intent)的方法只能啓動服務。


Activity調用bindService,服務會創建,接着執行onBind方法,該方法返回一個IBinder對象,Activity通過IBinder對象來訪問服務裏的方法。



bindService方式的一般過程:


①新建類BindService繼承Service類。在BindService類裏新建內部類MyBinder,繼承自Binder(Binder實現IBinder接口)。

MyBinder提供方法返回BindService實例。


    public class MyBinder extends Binder{

        

        public BindService getService(){

            return BindService.this;

        }

    }


實例化MyBinder得到mybinder對象;

MyBinder mybinder =new MyBinder();


重寫onBind()方法:

@Override

public IBinder onBind(Intent intent) {

return mybinder;

}


②在Activity裏,實例化ServiceConnection接口的實現類,重寫onServiceConnected()和onServiceDisconnected()方法


ServiceConnection conn=new ServiceConnection(){

 @Override

 public void onServiceConnected(ComponentName name, IBinder service) {

 }

 @Override

 public void onServiceDisconnected(ComponentName name) {

 }

};


③在Activity的onCreate()方法裏,新建Intent,並綁定服務


Intent intent=new Intent(MainActivity.this,BindService.class); 

bindService(intent, conn,BIND_AUTO_CREATE);

conn則是一個代表與service連接狀態的類,當我們連接service成功或失敗時,會主動觸發其內部的onServiceConnected或onServiceDisconnected方法。如果我們想要訪問service中的數據,可以在onServiceConnected()方法中進行實現,

BIND_AUTO_CREATE//一旦綁定服務就自動創建服務


④在Activity的onDestroy裏面,添加


unbindService(conn);

如果不加這一步,就會報android.app.ServiceConnectionLeaked: ******.MainActivity has leaked ServiceConnection的異常。

bindService()的執行過程如下:

bindService(intent,conn,flag)->Service:onCreate()->Service:onBind()->Activity:onServiceConnected()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章