一個常見的應用場景:
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中的公共方法吧。