远程绑定Service使用Messenger通讯
来源:互联网 发布:编程专用笔记本 编辑:程序博客网 时间:2024/05/17 17:57
1. 先在远程service里面new一个自己的Messenger :messenger = new Messenger(handler);
2. 在这个handler里面处理接收到的消息
3. 在onBind中把这个Messenger的binder返给客户端: return messenger.getBinder();
4. 客户端拿到这个Messenger就可以给service发送消息了:messenger.send(message);
@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubmessenger = new Messenger(service);}
5. 为了双向通信,客户端再new 一个Messenger : messengerClient = new Messenger(handler); 并且在发送消息时把这个messenger作为参数传给service:
message.replyTo = messengerClient;
6. 同样的,客户端在这个handler里面处理接收到的消息
7. 远程service在handleMessage中拿到这个messengerClient 就可以向客户端发送消息:Messenger mes = msg.replyTo;
package com.example.messengerserver;import android.app.Service;/** * @Description: TODO() * @author dml * @date 2015-4-28 下午2:50:52 */public class RemoteService extends Service {private Messenger messenger;private Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {if(msg.what==2){Bundle bundle = (Bundle) msg.obj;String s = bundle.getString("two");Log.d("dml", "接到客户端的消息 : " + s);Messenger mes = msg.replyTo;Message msgT = Message.obtain();msgT.what = 3;//msgT.obj = "service返回消息啦";try {mes.send(msgT);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}};};@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubLog.d("dml", "service onBind...");return messenger.getBinder();}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();Log.d("dml", "service onCreate...");messenger = new Messenger(handler);}}
package com.example.messengerclient;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.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.os.RemoteException;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button btn1,btn2;private ServiceConnection conn;private Messenger messenger;private Messenger messengerClient;private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);handler = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if(msg.what==3){//String s = msg.obj.toString();Log.d("dml", "服务返回的消息 : ");}}};messengerClient = new Messenger(handler);btn1 = (Button)findViewById(R.id.button1);btn2 = (Button)findViewById(R.id.button2); conn = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubmessenger = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubmessenger = new Messenger(service);}};btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbindService(new Intent("myservice"), conn, Context.BIND_AUTO_CREATE);}});btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubMessage message = Message.obtain();message.what = 2;message.replyTo = messengerClient;Bundle bundle = new Bundle();bundle.putString("two", "to server");message.obj = bundle;try {messenger.send(message);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();unbindService(conn);}}
0 0
- 远程绑定Service使用Messenger通讯
- Android 绑定Service的实现方法二:使用Messenger
- Service练习——通过Messenger(信使)来实现IPC通讯(Messenger底层使用AIDL实现)
- Activity绑定Service:Binder和Messenger
- Messenger 实现Activity与Service通讯、进程通讯
- Android Bind Service 使用Messenger
- Android Service使用Messenger通信
- Service(二)使用Messenger
- Android Service (Bind Service,使用 Messenger)
- Android Service 之(Bind Service,使用 Messenger)
- Android:使用Messenger实现进程间通讯
- service跨进程远程通讯
- Android基础——Service IPC通讯(Messenger实现)
- 使用Messenger类绑定服务显示时间
- 用Messenger实现与被绑定的Service交互
- android5.0远程绑定service
- Android bound service 详解三:使用Messenger
- Android bound service 详解三:使用Messenger
- R1 Lecture 09 Class Notes
- JAVA正则表达式 Pattern和Matcher
- TCP协议
- EA代码工程---轻松几步教你更改"EA生成的源代码表头注释格式"
- 关于安卓插件式开发
- 远程绑定Service使用Messenger通讯
- ECONNRESET (Connection reset by peer) on a server with authentication解决方案
- iOS程序压入后台,延续运行十分钟的方法
- mac 下的头脑风暴软件 xLine icon 添加和取消
- 直接提取四个顶点坐标
- iOS之RSA解密
- 无向图-邻接表表示
- 开发辅助工具-ddms
- 当大数据遇到安全分析:思科OpenSOC即将开源