android 进程间通信
来源:互联网 发布:百度网盘搜索 知乎 编辑:程序博客网 时间:2024/05/04 04:09
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 {@Overridepublic 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;@Overridepublic IBinder onBind(Intent intent) {return mMessenger.getBinder();}/** * Handler of incoming messages from clients. */@SuppressLint("HandlerLeak")class IncomingHandler extends Handler {@Overridepublic void handleMessage(Message msg) {mClient = msg.replyTo;}}
0 0
- Android进程间通信
- Android 进程间通信
- Android进程间通信
- android进程间通信
- Android进程间通信
- Android进程间通信
- Android进程间通信
- Android 进程间通信
- Android 进程间通信
- Android 进程间通信
- android进程间通信
- android 进程间通信
- android进程间通信
- Android 进程间通信
- Android间进程通信
- Android进程间通信
- android进程间通信
- Android进程间通信
- Hibernate的inverse,cascade属性简单介绍
- Red5的安装与测试
- 题解:艾米利亚的魔法
- java中重写与重载的区别
- 大数与小数模板(乘法,加法)
- android 进程间通信
- TOJ 3534.Shift Number
- 华为OJ——字符串加密
- Codeforces Round #364 vp
- C++笔记(一):概念
- 刚刚犯了个错误,关于div定位的。
- 孙子兵法与企业经营3
- Hibernate 缓存机制
- 最大正方形 (Standard IO)