messenger进程之间的通讯
2017-11-12 19:05
141 查看
服务端。
主函数不需要有东西。下面是客户端。
package com.animee.messenger_server; 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.os.RemoteException; import android.util.Log; public class MyService extends Service { public MyService() { } // 2. 创建信息的处理器对象Handler, 处理客户端返回的信息(Message) Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // 接受客户端传来的信息 int arg1 = msg.arg1; int arg2 = msg.arg2; Log.i("tag11","服务器端接受到的内容:arg1=="+arg1+",arg2=="+arg2); Messenger clientMessenger = msg.replyTo; Message mess = new Message(); mess.arg1 = 88; mess.arg2 = 66; try { clientMessenger.send(mess); } catch (RemoteException e) { e.printStackTrace(); } } }; // 1.创建一个信使对象 Messenger serverMessenger = new Messenger(handler); @Override public IBinder onBind(Intent intent) { // 3.在onBind() 方法中, 返回IBinder对象, messenger.getBinder(); return serverMessenger.getBinder(); } }
主函数不需要有东西。下面是客户端。
package com.animee.messenger_client; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; public class MainActivity extends AppCompatActivity { private ServiceConn conn; private Messenger serverMessenger; private Messenger clientMessenger; Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { int arg1 = msg.arg1; int arg2 = msg.arg2; Log.i("tag12","客户端接受服务器的信息:arg1="+arg1+",arg2=="+arg2); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); conn = new ServiceConn(); clientMessenger = new Messenger(handler); } @Override protected void onStart() { super.onStart(); // 1. 绑定服务 Intent intent = new Intent(); // 隐士意图跳转 intent.setAction("com.animee.service"); // 隐士意图跳转,通过messenger跨进程通信,5.0之后要求必须指定服务器所属的包名 intent.setPackage("com.animee.messenger_server"); bindService(intent,conn,BIND_AUTO_CREATE); } @Override protected void onDestroy() { super.onDestroy(); unbindService(conn); } //3.按钮的点击事件,发送数据到服务器端 public void send(View view) { Message message = Message.obtain(); message.arg1 = 100; message.arg2 = 76; // 将客户端的信使对象,存放到message信息当中 message.replyTo = clientMessenger; try { serverMessenger.send(message); } catch (RemoteException e) { e.printStackTrace(); } } class ServiceConn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { // 2.如果绑定成功后, 在ServiceConnection中的onServiceConnected() 方法中, 得到服务器的信使对象 serverMessenger = new Messenger(service); } @Override public void onServiceDisconnected(ComponentName name) { } } }
相关文章推荐
- linux进程之间通讯常用信号
- c# 进程间同步实现 进程之间通讯的几种方法
- c# 进程间同步实现 进程之间通讯的几种方法
- Android:使用Messenger实现进程间通讯
- 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这
- 实例解析C++/CLI程序进程之间的通讯
- 进程之间通讯的代码:
- WPF进程之间通讯
- Android进程间通讯——AIDL,Messenger(信使),ContentProvider,Clipboard(剪切板)
- Android进程间通讯之messenger
- Android面试篇之IPC机制[进程之间的通讯]
- 安卓进程通讯之messenger
- AIDL实现不同应用之间跨进程通讯及传递与返回各种数据类型和远程接口回调
- Android进程间通讯之messenger
- 进程之间通讯:M_COPYDATA消息来实现两个进程之间传递数据.
- C++/CLI程序进程之间的通讯
- QT下进程之间通讯——QtDBus(2)
- Messenger——比AIDL简单的跨进程通讯
- 进程之间通讯问题
- Android进阶笔记04:Android进程间通讯之Messenger ( 区别于AIDL)