Activity向Service發消息(在Service運行過程中):
在Service中實現一個繼承自Binder的內部類,
private final IBinder binder = new LocalBinder();
public class LocalBinder extends Binder {
public LogService getService() {
return LogService.this;
}
public void stopRunning(){
isRunning = false;
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return binder;
}
在Activity中獲取這個binder實例:
private boolean isConnected;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
isConnected=false;
}
@Override
public void onServiceConnected(ComponentName arg0, IBinder binder) {
// TODO Auto-generated method stub
localBinder = (LocalBinder) binder;
logSvc =((LocalBinder) localBinder).getService();
isConnected=true;
}
};
啓動服務並bind:
startService(intent);
doBindService();
即可通過這個binder實例與運行中的service通信:
localBinder.stopRunning();
Service向Activity發消息:
利用BroadcastReceiver。在Activity中註冊:
mReceiver = new timeUpReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.zhuming.broadcast.timeup");
this.registerReceiver(mReceiver, filter);
public class timeUpReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
toggleBtn.setChecked(false);
toggleTxt.setText("等待超時,請重新開啓服務");
}
}
在Service中發送廣播:
Intent intent = new Intent("com.zhuming.broadcast.timeup");
sendBroadcast(intent);