Day15 Messenger & DownloadManager
- Messenger 信使
- DownloadManager 下载管理器
Messenger 信使
- 概述
- 使用方法
概述
Messenger引用了一个Handler对象,以便others能够向它发送消息(使用mMessenger.send(Message msg)方法)。
该类允许跨进程间基于Message的通信(即两个进程间可以通过Message进行通信),在服务端使用Handler创建一个Messenger,客户端持有这个Messenger就可以与服务端通信了。使用Messenger作为中介实现跨进程的线程间通信
使用步骤
- 服务端:mMessenger = new Messenger(mHandler)
- 客户端使用bindlerService请求连接远程
- 远程onBind方法返回一个bindler:return mMessenger.getBinder()
- 客户端使用远程返回的bindler得到一个信使(即得到远程信使)
- 客户端可以使用这个远程信使对象向远程发送消息:rMessenger.send(msg);
不能通过Message.obj参数,因此obj没有实现Parcelable接口
如果需要传送数据,可以通过==Message.setData(Bundle)
== 方法
示例代码
- 服务端
/**
* 基于Messenger信使实现两个进程之间的线程间通信: 应用间使用同一个Handler对象
* 1) 服务端:
*
* 1. 创建Service子类,在类中声明Handler和Messenger类对象
* 2. 在onBind()方法中,获取Messenger的IBinder对象,并返回
* 3. 注册Service,并声明隐式启动或绑定组件的Action
* @author apple
*
*/
public class PrintService extends Service {
//1. 声明和实例化Handler及Messenger类对象
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
//处理其它线间或进程发送过来的消息
Log.i(