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);