首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

Android ApiDemos示范解析(41):App->Service->Messenger Service

2014-04-20 
Android ApiDemos示例解析(41):App-Service-Messenger Service前面LocalService 主要是提供同一Applicat

Android ApiDemos示例解析(41):App->Service->Messenger Service

前面LocalService 主要是提供同一Application中组件来使用,如果希望支持不同应用或进程使用Service。可以通过Messenger。使用Messgener可以用来支持进程间通信而无需使用AIDL。

下面步骤说明里Messenger的使用方法:

在Service中定义一个Handler来处理来自Client的请求。使用这个Handler创建一个Messenger (含有对Handler的引用).Messenger创建一个IBinder对象返回给Client( onBind方法)。Client 使用从Service返回的IBinder重新构造一个Messenger 对象,提供这个Messenger对象可以给Service 发送消息。Service提供Handler接受来自Client的消息Message. 提供handleMessage来处理消息。

在这种方式下,Service没有定义可以供Client直接调用的方法。而是通过”Message”来传递信息。

本例Messenger Service 涉及到两个类 MessengerServiceActivities 和 MessengerService.

首先看看Service的定义,在MessengerService定义了一个IncomingHandler ,用于处理来自Client的消息。

然后使用这个IncomingHandler定义一个Messenger。

应为这种方法采用的“Bound” Service模式,onBind 需要返回一个IBind对象, 可以通过mMessenger.getBinder()返回与这个Messenger关联的IBinder对象,Client可以通过这个IBinder对象重新构造一个Messenger对象,从而建立起与Service之间的通信链路。

再看看Client 的代码MessengerServiceActivities 在 ServiceConnection的 onServiceConnected的定义,这个方法返回MessengerService 的onBind 定义的IBinder对象:

本例实现了Client与Service 之间的双向通信,因此在Client也定义了一个Messenger对象mMessenger,用于处理来自Service的消息。

有了 mService对象,就可以使用send向Service发送消息,如过需要Service 返回信息,可以定义message.replyTo 对象。

Android ApiDemos示范解析(41):App->Service->Messenger Service


 


 


 

 

热点排行