Bound Service
當我們寫好一個service時, 在某些情況(Activity, Fragment, ... etc)會需要和service作資料交換的動作,
此時可以利用bindService()來和service建立連線
bindService()是非同步的method, 等連線建立後會觸發onServiceConnected(),此時才能與service做溝通
// xxxActivity.java
LocalService mService;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
}
public void onServiceDisconnected(ComponentName className) {
Log.e(TAG, "onServiceDisconnected");
mBound = false;
}
};
Intent intent = new Intent(this, LocalService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
不過當Android 的service是以bindService的方式被叫起來的時候(非startService), Android系統會自己在所有client 與service切斷連線時把這個service給destroy, 因此我們不需要特別去注意管理service是否還會存活,而如果是透過一般startService起來的話, 就必須在service呼叫stopSelf()或是透過其他元件呼叫stopService()來停止, 否則service就會一直存活在系統中(也許會被系統在未來某個時間砍掉)