android 进程间通信

Android进程间通信的两种方式:AIDL(Android Interface Definition Language)和Messenger,有分别不同的使用场景。

当然他们也都可以用于LocalService,但是LocalService最好使用IBinder的方式。

AIDL:主要用于客户端主动调用服务端,(Android一些系统服务,早期的支付宝快捷支付服务应该都是使用的这种方法)。

Messenger:主要用于服务端回调客户端,比如:开启一个RemoteService监听电子秤的重量变化或者接触的NFC卡,然后回调客户端的方法处理数据。

AIDL的使用步骤:

1.服务端的实现(建立AIDL文件,写Service实现AIDL定义的方法,具体实现方法可以Google)。

2.在我们的APP中使用时,首先要建立AIDL文件,包名和文件名必须和服务端的一致。

3.在bindService()的connection中初始化GpService,我们就可以调用服务端的方法了。

//GpService是根据AIDL文件生成的类
GpService mGpService = GpService.Stub.asInterface(service);

Messenger的使用步骤:

客户端代码:

final Messenger mMessenger = new Messenger(new IncomingHandler());

	/**
	 * Class for interacting with the main interface of the service.
	 */
	private ServiceConnection mConnection = new ServiceConnection() {
		public void onServiceConnected(ComponentName className, IBinder service) {
			Messenger mService = new Messenger(service);
			Message msg = Message.obtain();
			try {
				msg.replyTo = mMessenger;
				mService.send(msg);
			} catch (RemoteException e) {
				Log.e(TAG, "send download event failed" + e.getMessage());
			}
		}

		public void onServiceDisconnected(ComponentName className) {
			mService = null;
		}
	};

	/**
	 * Handler of incoming messages from service. 接收RFID读取的数据
	 */
	@SuppressLint("HandlerLeak")
	class IncomingHandler extends Handler {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case CommonUtil.NFC_RFID_RW: {
				rfidData(msg.obj.toString());
				break;
			}
			default:
				break;
			}
		}
	}

服务端代码:

final Messenger mMessenger = new Messenger(new IncomingHandler());
    private Messenger mClient;

	@Override
	public IBinder onBind(Intent intent) {
		return mMessenger.getBinder();
	}
	
	/**
	 * Handler of incoming messages from clients.
	 */
	@SuppressLint("HandlerLeak")
	class IncomingHandler extends Handler {
		@Override
		public void handleMessage(Message msg) {
			mClient = msg.replyTo;
		}
	}   






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值