罗永浩 我的奋斗,金贵洋,生死路上分集剧情
messenger
reference to a handler, which others can use to send messages to it. this allows for the implementation of message-based communication across processes, by creating a messenger pointing to a handler in one process, and handing that messenger to another process.
messenger的大概用法是:server端通过service的onbind将messenger返回,clien端拿到,通过messenger的send就可以进行通信。
简单的用法如下:
client端:
package main.xx.com.messager; import android.content.componentname; import android.content.context; 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 messenger mclientmessenger = new messenger(new handler(){ @override public void handlemessage(message msg) { log.i(common.key,msg.getdata().getstring("key")); super.handlemessage(msg); } }); private messenger mservermessagenger; private serviceconnection serviceconnection = new serviceconnection() { @override public void onserviceconnected(componentname name, ibinder service) { log.i(common.key,"onserviceconnected"); mservermessagenger = new messenger(service); } @override public void onservicedisconnected(componentname name) { mservermessagenger = null; }; }; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); bindservice(new intent(mainactivity.this,myservice.class),serviceconnection, context.bind_auto_create); } @override protected void ondestroy() { super.ondestroy(); unbindservice(serviceconnection); } public void click(view view){ message message = message.obtain(); bundle bundle = new bundle(); bundle.putstring(common.key,"这条消息来自客户端"); message.setdata(bundle); message.replyto = mclientmessenger; try { mservermessagenger.send(message); } catch (remoteexception e) { e.printstacktrace(); } } }server端:
package main.xx.com.messager; 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 { messenger messenger = new messenger(new handler(){ @override public void handlemessage(message msg) { log.i(common.key,"handlemessage"); log.i(common.key,msg.getdata().getstring(common.key)); try { msg.replyto.send(msg); } catch (remoteexception e) { e.printstacktrace(); } super.handlemessage(msg); } }); public myservice() { } @override public void oncreate() { log.i(common.key,"oncreate"); super.oncreate(); } @override public ibinder onbind(intent intent) { log.i(common.key,"onbind"); return messenger.getbinder(); } }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android apk 项目一键打包并上传到蒲公英的实现方法
Android 自定义LineLayout实现满屏任意拖动功能的示例代码
android 限制某个操作每天只能操作指定的次数(示例代码详解)
Android 集成 google 登录并获取性别等隐私信息的实现代码
网友评论