Android服务之信使
所谓的信使就是Messenger,它的作用是建立不同应用之间客户端和服务端的连接,并进而实现信息的传递。
对于服务端信使的创建:
①创建一个Handler对象handler
②创建一个信使对象Messenger messenger = new Messenger(handler);
③在onBind方法中通过调用messenger对象的getBinder()方法返回一个IBinder对象
④注册服务并添加Action
接下来是在第二个Android项目中获取服务端中创建的信使,并通过该信使给服务端发送消息。
好了,下面我们看代码吧。
第一个项目中的MyService:
package com.example.text05;import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Messenger;
import android.util.Log;public class MyService extends Service {// 创建Handler对象private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {//获取Message中的值int number = msg.arg1;Bundle bundle = msg.getData();String info = bundle.getString("info");Log.i("main", number + "--->" + info);};};// 创建一个信使对象Messenger messenger = new Messenger(handler);@Overridepublic IBinder onBind(Intent intent) {return messenger.getBinder();}}
在清单文件中注册:
<service android:name="com.example.text05.MyService" ><intent-filter><action android:name="com.example.messenger" /></intent-filter></service>
在第二个MainActivity中的实现:
package com.example.text06;import android.os.Bundle;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.util.Log;
import android.view.View;public class MainActivity extends Activity {private MyServiceConn conn;//创建信使对象用来接受服务端返回的Bind对象private Messenger messenger;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);conn = new MyServiceConn();// 声明IntentIntent intent = new Intent("com.example.messenger");// 绑定服务boolean flag = bindService(intent, conn, BIND_AUTO_CREATE);Log.i("main", "绑定是否成功" + flag);}class MyServiceConn implements ServiceConnection {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// 服务端:IBinder binder = messenger.getBinder();// 能不能通过参数service创建一个Messenger对象messenger = new Messenger(service);}@Overridepublic void onServiceDisconnected(ComponentName name) {}}public void send(View view) {//声明一个Message消息对象Message msg = Message.obtain();msg.arg1 = 100;//这里是不能直接传字符串的,因为字符串String实现的是Serializable接口而不是Parcelable接口//所以会出现异常,因为信使中如果传递对象则必须实现Parcelable接口,如果必须传递字符串考虑使用Bundle
// msg.obj = "你好,我来自客户端";Bundle bundle = new Bundle();bundle.putString("info", "你好,我来自客户端");msg.setData(bundle);try {//通过信使传递消息messenger.send(msg);} catch (RemoteException e) {e.printStackTrace();}}}
运行结果:这里是通过点击客户端给服务端发送消息,下面是Log输出
Android服务之信使相关推荐
- Android服务二 创建绑定服务
若对AIDL感兴趣,请参考跨进程通信二 AIDL 绑定服务 Ibinder实现绑定服务 功能:主要为了实现组件与服务的交互,在绑定的组件可以调用服务端的功能函数 package service;imp ...
- 《Android 应用案例开发大全(第二版)》——6.1节Android系统的信使:Intent
本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第6章,第6.1节Android系统的信使:Intent ,作者李宁,更多章节内容可以访问云栖社区"异步 ...
- android从服务端获取json解析显示在客户端上面,Android服务端获取json解析显示在客户端上面.doc...
Android服务端获取json解析显示在客户端上面 Android从服务端获取json解析显示在客户端上面 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比 ...
- erlang-百度云推送Android服务端功能实现-erlang
百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Androi ...
- Android服务一 创建启动服务
若要学习创建绑定服务,请查看下篇Android服务二 创建绑定服务 启动服务 基于Service package service;import android.app.Service; import ...
- Qt创建Android服务
Qt创建Android服务 创建Android服务 创建Android服务 从Qt 5.7开始,您可以使用Qt创建Android服务.服务是在后台运行的组件,因此它没有用户界面.执行长期操作(例如记录 ...
- Android 服务入门
前言:硬着头皮把数据库SQLite看完了,接下来就是android服务了,因为自己本身就是菜鸟,所以呢,也只是做做笔记,技术上的东西就别指望我了. 1.什么是服务呢?举个例子,百度地图,美团外卖,OF ...
- android.os.binderproxy cannot be cast to,Android服务android.os.BinderProxy错误
我一直在尝试使此android服务正常工作,但我不知道为什么会收到此错误. 05-13 12:13:36.203: ERROR/dalvikvm(7782): could not disable co ...
- android 服务自动结束,Android服务自动停止
我正在制作一个带有闹钟功能的应用程序.我正在使用这种服务,不断检查设备的当前时间与我的数据库中的时间.Android服务自动停止 我的问题是,如果应用程序从后台删除或设备是rebooted,此serv ...
最新文章
- 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库
- 逐步转向自己主动化測试
- 有关转换流中涉及的【乱码问题】
- 用Android访问本地站点---(localhost,10.0.2.2)要区别
- 使用spring @Scheduled注解执行定时任务
- 2017第二届中国信息通信大数据大会将于6月在京召开
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- 11.go 环境变量
- 从计算、建模到回测:因子挖掘的最佳实践
- Ubuntu 18.04 开机开启小键盘数字键numlock灯
- 使用QtCharts报错
- 249PHP等于多少钱,一百万新台币等于多少人民币
- 数据是美丽的:11个可视化案例分享
- Mysql横向分组统计
- Visual Saliency Transformer 读后感
- 你可能不知道的GDB命令
- matplotlib·2(绘制饼图,直方图,极坐标图,复杂子区域分割)
- 如何设计一个通用的查询接口
- spring boot在启动程序之前执行逻辑
- 在Arcgis地图上绘制Echarts热力图(Heatmap)