android Messenger跨进程通信
来源:互联网 发布:花都金蝶软件代理商 编辑:程序博客网 时间:2024/05/18 13:42
1、android messager可以实现不同进程之间数据的传递。通过点击进去看messenger类可以看到,我们可以创建一个service用于处理和客户端的连接请求,然后通过handler中创建一个messener对象,实现对service数据传递。
例子代码下载地址:http://download.csdn.net/download/u011324501/9996821
/** * Create a new Messenger pointing to the given Handler. Any Message * objects sent through this Messenger will appear in the Handler as if * {@link Handler#sendMessage(Message) Handler.sendMessage(Message)} had * been called directly. * * @param target The Handler that will receive sent messages. */ public Messenger(Handler target) { mTarget = target.getIMessenger(); }/** * Create a Messenger from a raw IBinder, which had previously been * retrieved with {@link #getBinder}. * * @param target The IBinder this Messenger should communicate with. */ public Messenger(IBinder target) { mTarget = IMessenger.Stub.asInterface(target); }}
通过getBinder可以在service获取到发送过来的数据
public IBinder getBinder() { return mTarget.asBinder(); }通过send方法发送数据
public void send(Message message) throws RemoteException { mTarget.send(message); }
2、下面实现不同进程之间的数据传递,首先在androidmanifest.xml中添加下面代码,第二句的意思时给service开一个新的进程,:开头书属于当前应用的私有进程,其他应用是不能跟他跑在同一个进程中的,当不以:开头的命名是属于全局进程,其他应用是可以通过ShareUID方式跟它在同一个进程中。
<service android:name=".MessengerService" android:process=":remote"/>3、新建一个service类用于继承service,然后写一个Handler来首收发数据,当接受到发送过来的数据时,就再返回数据。
public class MessengerService extends Service { private final static String TAG = "MessengerService"; public final static int SERVICE_TEST = 21; private final Messenger mMessenger = new Messenger(new MessengerHandler()); private static class MessengerHandler extends Handler{ @Override public void handleMessage(Message msg) { switch (msg.what){ case MainActivity.TEST_MESSAGE: Log.e(TAG,"receiver msg is "+msg.getData().getString("msg")+" current time="+System.currentTimeMillis()); sendMsg(msg); break; default: super.handleMessage(msg); } super.handleMessage(msg); } } public static void sendMsg(Message msg){ Messenger service = msg.replyTo; Message message = Message.obtain(null,SERVICE_TEST); Bundle bundle = new Bundle(); bundle.putString("reply","test 回复你"); message.setData(bundle); try { service.send(message); }catch (Exception e){ e.printStackTrace(); } } @Nullable @Override public IBinder onBind(Intent intent) { return mMessenger.getBinder(); }}4、首先可以先绑定messengerService,然后在里面进行数据的发送
private Messenger mMessenger; private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mMessenger = new Messenger(service); Message msg = Message.obtain(null, TEST_MESSAGE); Bundle bundle = new Bundle(); bundle.putString("msg", "test hehhehhehe"); msg.setData(bundle); msg.replyTo = testMessenger; try { mMessenger.send(msg); } catch (Exception e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } };然后在启动onCreate中启动service
Intent intent = new Intent(getApplication(), MessengerService.class); bindService(intent, mConnection, Context.BIND_AUTO_CREATE);同时在onDestroy中取消掉service
unbindService(mConnection);这样我们就可以在activity中跨进程发送数据给service端,下面时打印的数据,可以看到它的进程时跟activity的是不一样的
service的进程
5、要使com.example.apple.messager进程中能接收到service发送过来的数据需要跟service一样写一个Handler 和Messenger用于接收数据
private Messenger testMessenger = new Messenger(new MessengerHandler()); private static class MessengerHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MessengerService.SERVICE_TEST: Log.e(TAG, "receiver service msg is " + msg.getData().getString("reply") + " current time="+System.currentTimeMillis() + " =="+msg.what); break; default: super.handleMessage(msg); } } }这样就可以实现不同进程之间的数据收发了。现在是使用了service代替应用,其实可以写成不同应用直接实现数据的传递的,具体实现可自行修改。
例子代码下载地址:http://download.csdn.net/download/u011324501/9996821
阅读全文
0 0
- android Messenger 跨进程通信
- android Messenger 跨进程通信
- Android Messenger 跨进程通信!!!!!!!!!!!!!!!!!!
- Android Messenger 跨进程通信
- 【Android】Messenger 跨进程通信
- Android Messenger 跨进程通信
- Android Messenger 跨进程通信
- Android 跨进程通信--Messenger
- android Messenger跨进程通信
- Messenger 跨进程通信
- Android Messenger简单的跨进程通信
- Android跨进程通信一 Messenger
- Android跨进程通信一 Messenger
- Android 利用Messenger进行跨进程通信
- android 跨进程通信---Messenger简单用法
- Android跨进程间通信Messenger
- 利用Messenger跨进程通信
- 跨进程通信之Messenger
- 仿函数小例子
- 慕课网bootstrap一
- [POJ](2251)Dungeon Master ---三维bfs
- 机器学习中的Bias,Error,Variance的区别
- hdu 2489 Minimal Ratio Tree(prim+dfs)
- android Messenger跨进程通信
- Scroller实现View弹性滑动
- Android dp方式的屏幕适配工具使用(bat批处理方式)
- Java:HashMap、HashTable
- C++的STL之仿函数简单介绍
- 从主函数输入十个不等长的字符串,编写函数,对这些串进行排序,在主调函数中输出排好序的串,指针实现。
- 例题7-2 最大乘积(Maximum Product, UVa 11059)
- dp 最大全1子正方形
- Hdu 6209 The Intersection(Stern-Brocot tree+二分)