Android7.0Messager通信分析
来源:互联网 发布:java 编程思想pdf下载 编辑:程序博客网 时间:2024/06/08 02:11
Messenger是一种实现跨进程通信的方法。是一种轻量级的IPC发难,底层实现是AIDL。
Messenger的构造方法
public Messenger(Handler target){ mTarget =target.getImessenger();}public Messenger(IBinder target){ mTarget = IMessenger.Stub.asInterface(target);}
有以上代码可看出Messenger对AIDL做了封装。
Messenger实现
通过Messenger实现在Service与Acitivity之间的通信。
服务端代码
package com.treeanimals.max.tecent;import android.app.Service;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.os.RemoteException;import android.support.annotation.Nullable;import android.util.Log;/** * Created by 95112 on 8/30/2017. */public class MessengerService extends Service { private static final String TAG = "MessengerService"; private static class MessengerHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: Log.d(TAG,msg.getData().getString("msg")); Messenger client = msg.replyTo; Message replyMessage = Message.obtain(null,2); Bundle bundle = new Bundle(); bundle.putString("reply","回复"); replyMessage.setData(bundle); try { client.send(replyMessage); } catch (RemoteException e) { e.printStackTrace(); } break; default: super.handleMessage(msg); } } } private final Messenger messengerHandler = new Messenger(new MessengerHandler()); @Nullable @Override public IBinder onBind(Intent intent) { return messengerHandler.getBinder(); }}
Activity中的代码
package com.treeanimals.max.tecent;import android.app.Activity;import android.app.Notification;import android.app.Service;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.os.RemoteException;import android.support.annotation.Nullable;import android.util.Log;/** * Created by 95112 on 8/30/2017. */public class MessagerActivity extends Activity { private static final String TAG = "MessagerActivity"; private Messenger messenger;//用于获取Service的Messenger private Messenger getReplyMessenger =new Messenger(new MessengerHandler() );//接收处理来自Service发来信息的Handler private ServiceConnection connection = new ServiceConnection() {//建立与Service相连接的Connection @Override public void onServiceConnected(ComponentName name, IBinder service) { messenger = new Messenger(service); Message msg = Message.obtain(null,1); Bundle data = new Bundle(); data.putString("msg","test"); msg.setData(data); //绑定回传 msg.replyTo = getReplyMessenger; try{ messenger.send(msg); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.messagerlayout); Intent intent = new Intent(this,MessengerService.class); bindService(intent,connection, Context.BIND_AUTO_CREATE); } @Override protected void onDestroy() { unbindService(connection);//解绑 super.onDestroy(); } private static class MessengerHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case 2: Log.d(TAG,msg.getData().getString("reply")); break; default: super.handleMessage(msg); } } }}
阅读全文
0 0
- Android7.0Messager通信分析
- Messager通信
- 进程间通信messager
- Android7.0关机流程分析
- Android7.0 startService流程分析
- Android7.0关机流程分析
- Android7.0 init进程分析
- android7.0拨号流程分析
- Android7.0 Binder通信(1) ServiceManger
- MSN Messager协议分析
- Android7.0 init进程源码分析
- Android7.0 编译系统流程分析
- Android7.0恢复出厂设置过程分析
- Android7.0 PowerManagerService亮灭屏分析(一)
- Android7.0 PowerManagerService亮灭屏分析(二)
- Android7.0 PowerManagerService亮灭屏分析(三)
- Android7.0startActivity启动过程分析
- Android7.0 DirectBoot阻塞开机分析
- Linux+.NetCore+Nginx搭建集群
- UESTC1057 (线段树裸题)
- 51nod 1066
- B6AC使用说明
- scikit-learn实现线性回归之LinearRegression模型
- Android7.0Messager通信分析
- 加载配置文件出错
- 《刻意练习》读书笔记
- JVM内存组成
- POJ 3764 The xor-longest Path Trie树/字典树
- 音频和视频处理 6
- java文件上传
- RQNOJ 117 最佳课题选择
- PHP开发API