android java開發 第三天 之 Activity 與 Service 綁定(activiey 調用service中方法)

一個常見的應用場景:

        loginactivity登陸頁面 點擊login, 發送給後臺的服務類CmdSocketService 去處理登陸業務,

並獲取登陸狀態(成功失敗的反饋)

loginActivity使用封裝好的CmdSocketService(service)類的方法:


a) loginActivity類中定義:


CmdSocketService serviceBinder;


// 下面定義用來連接到服務CmdSocketService後的處理函數
 private ServiceConnection mConn = newServiceConnection()

{
      public void onServiceConnected(ComponentName className, IBinder service)

     {

                   // 這裏service其實是MyBinder類對象,,其中有個getService()方法,用於返回service對象自己。

                   // LoginActivity獲得了service對象(serviceBinder)的引用,那使用service中方法和普通的類方法一樣使用。
              serviceBinder=((CmdSocketService.MyBinder)service).getService();


              Log.v(TAG,"get CmdSocketService 引用 ok !");


              mBound = true;//自己定義的服務是否綁定標記
      }
      public void onServiceDisconnected(ComponentName className) {
              serviceBinder = null;


              mBound = false;
      }  
};


 b) onStart()中定義:

Intent intent = new Intent(this,CmdSocketService.class)


bindService(intent, mConn, Context.BIND_AUTO_CREATE); 


//===========================================================

service定義:

public class CmdSocketService extends Service{

//1 .

public class MyBinder extends Binder

{
      public CmdSocketService getService()

     {


      Log.v(TAG,"getService()");


      return CmdSocketService.this;  //返回service對象本身
      }  
}


// 2.
private MyBinder mBinder = new MyBinder();


//3.反饋給onServiceConnection()

onBind()實現:

{

       return mBinder;

}


activity和services綁定流程:(bindService方式)

1. new intent指定和哪個service綁定

2. 開始綁定,傳遞服務連接處理函數ServiceConnection()(有點像回調函數),//調用此函數時android會調用service類中的onBind()函數。

3.onBind()函數裏面返回了一個Binder子類對象。Binder子類中有個getServices()方法,返回service對象本身。,最終就是爲了給loginActiviy返回service對象的引用。

4.logingActivity和service綁定成功後。android會調用onServiceConnected()函數。此函數中IBinder就是service返回的Binder的子類對象MyBinder.

5.調用MyBinder中的方法getService()即可獲得service對象的引用。

6.開始調用service中的公共方法吧。


發佈了74 篇原創文章 · 獲贊 9 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章