1.簡單的方法,使用廣播。service中處理完資料後發送廣播,在需要接收的地方接收廣播。
2.使用回調接口。編寫回調的地方是往往是處理資料的地方,在這裡寫interface等。如下:
public class UpdateLiveDataService extends Service {
private WriteToDbListener mWriteToDbListener;
public interface WriteToDbListener {
void onWriteFinish();
}
public void setWriteToDbListener(WriteToDbListener listener) {
mWriteToDbListener = listener;
}
/**
* 傳回一個Binder對象
*/
@Override
public IBinder onBind(Intent intent) {
return new MsgBinder();
}
public class MsgBinder extends Binder {
/**
* 擷取目前Service的執行個體
* @return
*/
public UpdateLiveDataService getService(){
return UpdateLiveDataService.this;
}
}
...在相關的地方回調
LogUtil.i(this,"mWriteToDbListener="+mWriteToDbListener);
if (mWriteToDbListener != null) {
mWriteToDbListener.onWriteFinish();
}
}
使用回調的地方:
private void registerWriteToDbListener() {
//綁定Service,現在的service綁定在5.0之後要用顯示的綁定了
Intent intent = new Intent();
intent.setAction("lenovo.com.ismartvlive.UPDATE");
intent.setPackage(getPackageName());
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//傳回一個MsgService對象
mUpdateLiveDataService = ((UpdateLiveDataService.MsgBinder)service).getService();
mUpdateLiveDataService.setWriteToDbListener(new UpdateLiveDataService.WriteToDbListener() {
@Override
public void onWriteFinish() {
LogUtil.i(this, "write to Db finish,isFirstTune:"+isFirstTune);
if (isFirstTune) {
startPlayLastTuneChannel();
}
}
});
}
};