zoukankan      html  css  js  c++  java
  • 绑定Service 三种使用方式 之 利用Messenger实现进程双向通信

    思路:

       (以下 提供服务端简称服务端,访问服务端简称客户端)

        1. 服务进程和客户端进程之间的通信传递的Message,所以服务端要有Handler对象来处理收到的Message对象。

         2. 客户端给服务端发送Message对象利用的Messenger对象是从服务端传过来的。同理,若服务端给客户端发送Message,使用的Messenger是从客户端传递       过来的。即,响应消息的一端要提供Messenger信使对象给对方端

         3.客户端先给服务端发送消息,服务端才能给客户端发信息作为回应。

         4.注:若实现双向通信,服务端和客户端要都具备Handler对象和Messenger对象,Handler对象处理消息,Messenger发送消息。

       

        本文通过隐式Intent来绑定服务,需要设置Intent的action值,该值要与服务端配置文件中Intent-filter中设置的action属性对应。    需要在配置文件中注册服务,并设定exported属性为true,该属性的默认值是true.false表示外部进程无法访问该服务。

       

     实现步骤:

    1.创建Service进程,在Service中创建Handler对象,用于处理客户端发送的Message;利用该Handler对象创建Messenger对象,用于客户端给服务端发消息。

    2,在onBind()方法中利用上步创建的Messenger对象创建IBinder接口对象,并作为onBind()方法的放回值传给客户端

    3.在配置文件中注册服务,同时要注册一个过滤器。

    4.创建客户端进程,在客户端创建实现ServiceConnection接口的子类,实现该接口的两个方法,在onServiceConnected(ComponentName arg0, IBinder arg1) {}方法中,利用服务端传过来的IBinder接口对象参数创建Messager对象,用来客户端发消息。

         至此,实现了客户端向服务端发送Message的单向通信。

    5,如需要双向通信,在client端创建自己的Handler对象,利用该对象再创建client的Messenger对象。

    6. client端send Message的时候,将上步创建的Messenger对象赋给Message的replyTo字段;

    7. Service端处理消息的时候,获得封装在message中的client端Messenger,利用该Messenger对象,服务端就可以给客服端发message

  • 相关阅读:
    Google是不是真的不能用了?非常奇怪的问题
    九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题
    UNIX网络编程卷1 时间获取程序server TCP 协议相关性
    uva 1557
    C经典之14-双向链表存储1-10---ShinePans
    Java 内部类
    HiPAC高性能规则匹配算法之查找过程
    Objective-C之成魔之路【9-类构造方法和成员变量作用域、以及变量】
    NSRange,判断字符串的各种操作~
    NSRange类详解
  • 原文地址:https://www.cnblogs.com/d-on/p/4045544.html
Copyright © 2011-2022 走看看