android中activity与service的双向通信

Activity类:

public class MainActivity extends Activity implements OnClickListener,MyService.CallBack,ServiceConnection{
	
	private String TAG="MyService";
	private MyService mService;
	
	@Override
	protected void onPause() {
		super.onPause();
		if(mService != null){
			mService.setCallBack(null);			//避免内存泄露
			//取消绑定服务
			unbindService(this);
			Log.i(TAG,"成功取消绑定服务");
		}
	}

	@Override
	protected void onResume() {
		super.onResume();
		Intent bindIntent = new Intent(this,MyService.class);
		//绑定服务(bindService调用service.onBind()方法,onBind()返回结果回传给onServiceConnection()方法作为参数)
		bindService(bindIntent,this,BIND_AUTO_CREATE);
		Log.i(TAG,"成功绑定服务");
	}

	public void onClick(View v) {
		switch(v.getId())
		{
		case R.id.start_service:
			if(mService != null){
				//执行后天操作
				mService.executeBackgroundOperation();
			}
			break;
		default:
			break;
		}
	}

	private Button startServiceButton;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		startServiceButton = (Button)findViewById(R.id.start_service);
		startServiceButton.setOnClickListener(this);
		startServiceButton.setEnabled(false);
	}

	public void updateUI() {
		//界面更新
		Log.i(TAG,"更新界面");
	}

	public void onServiceConnected(ComponentName name, IBinder service) {
		//获取服务对象的引用
		mService = ((MyService.MyBinder)service).getService();
		mService.setCallBack(this);
		startServiceButton.setEnabled(true);
	}

	public void onServiceDisconnected(ComponentName name) {
		startServiceButton.setEnabled(false);
		mService = null;
	}
}


1:在onResume方法中绑定服务,即调用bindService方法,bindService方法会调用service的onBind方法,其返回结果作为参数传给onServiceConnected方法。

2:在onPause方法中解除服务的绑定,即调用unbindService方法,unbindService方法会调用onServiceDIsconnected方法。

Service类:

public class MyService extends Service {

	private static final String TAG = "MyService";
	
	private MyBinder mBinder;
	private CallBack callBack;
	
	public interface CallBack{
		void updateUI();
	}
	
	public void setCallBack(CallBack callBack){
		this.callBack = callBack;
	}
	
	@Override
	public void onCreate() {
		Log.i(TAG,"创建服务");
		mBinder = new MyBinder();
		super.onCreate();
	}

	@Override
	public void onDestroy() {
		Log.i(TAG,"销毁服务");
		mBinder = null;
		super.onDestroy();
	}

	@Override
	public IBinder onBind(Intent intent) {
		Log.i(TAG,"绑定服务");
		return mBinder;
	}
	
	public class MyBinder extends Binder{
		public MyService getService(){
			return MyService.this;
		}
	}

	public void executeBackgroundOperation()
	{
		Log.i(TAG,"执行后台操作");
		//一般使用asyncTack或者handler来单独开启线程处理耗时任务
		//code here...
		Log.i(TAG,"后台操作执行完毕");
		callBack.updateUI();
	}
}

CallBack接口一般定义回调方法来更新界面UI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值