使用Messenger实现进程间通信
来源:互联网 发布:vue.js tomcat 编辑:程序博客网 时间:2024/06/05 18:15
Messenger可以翻译为信使,通过它可以在不同进程中传递Message对象,底层是AIDL,一次处理一个请求,不存在并发执行的情形MessagerActivity位于默认进程中,默认进程名为包名:com.zhoujian.androidMessagerService位于私有进程:com.zhoujian.android:romoteandroid:process=":romote"利用Messenger实现跨进程间通信MessagerActivity.javapackage com.zhoujian.android.activity;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import com.zhoujian.android.R;import com.zhoujian.android.service.MessagerService;/** * Created by zhoujian on 2016/11/16. */public class MessagerActivity extends Activity{ public static final String TAG="MessagerActivity"; public static final int MSG_FROM_CLIENT=1; //创建接受服务端消息的Messenger和Handler Handler handler = new Handler() { private String mReply; @Override public void handleMessage(Message msg) { switch (msg.what) { case 2: mReply = msg.getData().getString("reply"); Log.e(TAG,"接受的消息来自服务端:"+mReply); break; } } }; Messenger replyMessenger = new Messenger(handler); ServiceConnection conn = new ServiceConnection() { private Messenger mMessenger; @Override public void onServiceConnected(ComponentName name, IBinder binder) { //创建信使 mMessenger = new Messenger(binder); //创建Message Message msg = Message.obtain(null,MSG_FROM_CLIENT); //创建Bundle Bundle bundle = new Bundle(); //把消息放入binder bundle.putString("messager","你好!我来自客户端"); //设置数据 msg.setData(bundle); //需要把接受服务端回复的Messenger通过Message的replyTo参数传递给服务端 msg.replyTo = replyMessenger; try { //用信使发送Mesage mMessenger.send(msg); } catch (Exception e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } }; //option+command+k 对生命周期方法进行排序 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_messager); Intent intent = new Intent(MessagerActivity.this, MessagerService.class); bindService(intent, conn, Context.BIND_AUTO_CREATE); } @Override protected void onRestart() { super.onRestart(); } @Override protected void onStart() { super.onStart(); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { unbindService(conn); super.onDestroy(); }}MessagerService.javapackage com.zhoujian.android.service;import android.app.Service;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.util.Log;/** * Created by zhoujian on 2016/11/28. */public class MessagerService extends Service{ public static final String TAG = "MessagerService"; public static final int MSG_FROM_CLIENT=1; Handler handler = new Handler() { private String messager; @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_FROM_CLIENT: messager = msg.getData().getString("messager"); Log.e(TAG,"接受的消息来自客户端:"+messager); //服务端收到客户端的消息后,在发送一条消息到客户端 mTo = msg.replyTo; //创建Message Message mMessae = Message.obtain(null,2); Bundle bundle = new Bundle(); bundle.putString("reply","您的消息已经收到,稍后给您回复!"); mMessae.setData(bundle); try { mTo.send(mMessae); } catch (Exception e) { e.printStackTrace(); } } } }; Messenger mMessenger = new Messenger(handler); @Override public IBinder onBind(Intent intent) { return mMessenger.getBinder(); }}
0 0
- Android使用Messenger实现进程间通信
- 使用Messenger实现进程间通信
- 进程间通信使用Messenger
- 使用Messenger实现进程间的相互通信
- 使用Messenger实现进程间通信(IPC)
- Android进程间通信(3)-Messenger实现
- Android进程间通信(三):使用Messenger实现进程间通信
- Android进程间通信之使用Messenger
- 使用Messenger进行进程间通信
- Android进程间通信之使用Messenger
- Messenger(信使)进程间通信使用
- Android 进程间通信之使用Messenger
- Android进程间通信之使用Messenger
- 进程间通信Messenger的简单使用
- 进程间通信----Messenger
- 进程间通信 Messenger
- 进程间通信Messenger
- 进程间通信---Messenger
- C++代码注释转化
- Android设计模式之23种设计模式一览
- MySQL☞悲观锁详解
- leetCode
- 在火星最后一个月——第一天
- 使用Messenger实现进程间通信
- 算法入门
- 跨域问题
- ubuntu安装内核后,必须更新grubs才会开机选择新内核
- UI设计师不可不知的安卓屏幕知识
- Ldap connection timeout error:
- 静态链接--空间和地址分配
- Struts2框架学习(第四讲)
- 机器学习 Logistic回归 原理Python实现