服务至活动间的通信方法_3

文档序号:9597733阅读:来源:国知局
录列表,然后发送消息MSG_SEND_FR0M_SERVICE给应用主线程,应用主线程会根据活 动客户端记录列表,获取活动客户端记录中的Activity成员,然后调用Activity对应的 Receive Service Envent函数将Service事件发送到Listen Activity中。由于不处于同 一 APP 中的 Service 和 Listen Activity 由 Activity Manager Service 管理,所以还需要 通过IActivityManager远程Binder调用接口完成不处于同一 APP下的Listen Activity 的派发^需要在IActivityManager类中定义新的接口,具体采用如下定义方式:
[0059] public boolean send Event To Activity(Intent service Event, String service Name
[0060] ) throws Remote Exception;
[0061] 参数和返回值同Activity Thread的send Event To Activity,具体实现如下:
[0062]
[0063] 将参数打包成Parcel结构,然后通过远程调用到系统进程中对应Binder线程对 该接口的功能实现,定义在ActivityManagerService组件中,由IActivityManager对应的 Binder线程调用,具体如下:
[0064] public boolean send Event To Activity(Intent service Event, String service Name);
[0065] 该函数通过 service Name 从 Activity Manager Service 的哈希表 mService Activities中匹配对应的服务记录与活动记录实体对应项,哈希表mService Activities 在Listen Service中创建。如果服务记录和活动记录实体对应项不存在,说明没有其 他APP下的Activity Listen该Service,Binder线程返回。如果存在对应项,则保存 Listen Activity对应的活动记录实体列表,发送消息MSG_SEND_TO_ACTIVITY到Activity Manager Service服务线程中。IActivityManager对应的Binder线程调用结束,进入 Activity Manager Service 服务线程。
[0066] Activity Manager Service 服务线程收到 MSG_SEND_TO_ACTIVITY 消息后,根 据记录的Listen Activity对应的活动记录实体列表,通过IApplication Thread远程 调用接口中新定义的函数receive Event From Activity将数据发送给对应的应用, IApplicationThread 中新的接口函数 receive Event From Activity 定义如下:
[0069] 该接口函数将参数打包后,发送给IApplicationThread接口对应的Binder线程 进行处理。Listen Activity所在的应用进程中的Binder线程收到该请求后,直接发送消 息MSG_EVENT_FROM_ACTIVITY给应用主线程,然后Binder线程返回。应用主线程收到该消 息后,调用Listen Activity的receive Event From Activity函数来完成数据的接收和 处理。Activity 的 receive Event From Activity 函数定义如下:
[0070] public void receive Event From Activity (Intent service Event, String service Name);
[0071] 具体实现由每个Activity自身根据实际需要处理的Service事件来进行实现。
[0072] 综上所述,本发明通过双层Listen管理,快速实现同APP下的通信机制,解决了当 Service产生事件后,可以主动通知所有对该Service感兴趣的Activity,不论Activity 和Service是否处于同一 APP中本发明提供的Service到Activity间的通信机制,使得 Service和Activity间的交互方便、高效、实时。
[0073] 通过说明和附图,给出了【具体实施方式】的特定结构的典型实施例,基于本发明精 神,还可作其他的转换。尽管上述发明提出了现有的较佳实施例,然而,这些内容并不作为 局限。
[0074] 对于本领域的技术人员而言,阅读上述说明后,各种变化和修正无疑将显而易见。 因此,所附的权利要求书应看作是涵盖本发明的真实意图和范围的全部变化和修正。在权 利要求书范围内任何和所有等价的范围与内容,都应认为仍属本发明的意图和范围内。
【主权项】
1. 一种服务至活动间的通信方法,其特征在于,应用于安卓系统中,所述通信方法包 括: 步骤S1,所述服务产生事件; 步骤S2,判断所述活动和待监听的所述服务是否处于同一个应用中;若是则执行步骤S3,否则直接执行步骤S4; 步骤S3,在所述应用的主线程中构建服务与活动哈希表,所述活动对所述事件监听对 应的服务; 步骤S4,远程结合调用接口,进入活动管理服务组件后,匹配已经打开的服务列表,建 立所述哈希表。2. 根据权利要求1所述的服务至活动间的通信方法,其特征在于,步骤S1还包括: 步骤S11,于所述步骤S1之后,调用sendEventtoactivity函数发送所述事件至监 听活动中。3. 根据权利要求1所述的服务至活动间的通信方法,其特征在于,所述步骤S2具体包 括: 步骤S21,进入服务所在应用的主线程,查询与所述事件对应的哈希表,判断是否在同 一所述应用中有所述活动在监听服务。4. 根据权利要求1所述的服务至活动间的通信方法,其特征在于,所述步骤S2具体包 括: 步骤S22,获取活动名,进入所述主线程的监听服务函数; 步骤S23,调用服务名; 步骤S24,根据所述活动名、所述服务名获取活动客户端记录实体和所述service实 体; 步骤S25,判断所述服务名对应的所述活动实体是否存在。5. 根据权利要求4所述的服务至活动间的通信方法,其特征在于,所述步骤S3具体包 括: 步骤S31,创建所述服务实体与所述活动客户端记录实体之间的哈希表。6. 根据权利要求5所述的服务至活动间的通信方法,其特征在于,所述步骤S4具体包 括: 步骤S41,进入所述活动管理服务组件后,通过所述服务名判断是否能够从所述活动 管理服务中的哈希表中获取对应的服务记录实体,若是则执行步骤S42,否则结束并提示出 错; 步骤S42 :通过所述活动名从所述活动管理服务中获取对应的活动记录实体,建立所 述服务记录实体与所述活动记录实体的哈希表。7. 根据权利要求6所述的服务至活动间的通信方法,其特征在于,所述通信方法还包 括: 步骤S5,于所述步骤S4之后,通过所述活动获取所述活动名,进入所述主线程的所述 监听服务函数; 步骤S6,调用服务名; 步骤S7,通过所述活动名、所述服务名获取活动客户端记录实体和所述服务实体; 步骤S8,判断所述服务名对应的所述服务实体是否存在;若是,则删除所述服务实体 与所述活动客户端记录实体之间的对应项;否则进入所述活动管理服务删除所述服务记录 实体与所述活动记录实体之间的对应项。8. 根据权利要求4或7任意一个权利要求所述的服务至活动间的通信方法,其特征在 于,所述活动客户端记录实体存在于mActivities中和/或所述服务实体存在于mServices 中。9. 根据权利要求4或7任意一个权利要求所述的服务至活动间的通信方法,其特征在 于,所述活动名和/或所述服务名包括包名和类名。10. 根据权利要求1所述的服务至活动间的通信方法,其特征在于,所述步骤S42具体 还包括,通过IActivityManager远程结合调用接口。
【专利摘要】本发明涉及通信领域,尤其涉及一种服务至活动间的通信方法。一种服务至活动间的通信方法,可应用于安卓系统中,通信方法包括:步骤S1,服务产生事件;步骤S2,判断活动和待监听的服务是否处于同一个应用中;若是则执行步骤S3,否则直接执行步骤S4;步骤S3,在应用的主线程中构建服务与活动哈希表,活动对事件监听对应的服务;步骤S4,远程结合调用接口,进入活动管理服务组件后,匹配已经打开的服务列表,建立哈希表。
【IPC分类】G06F9/54
【公开号】CN105354095
【申请号】CN201510702952
【发明人】田泽丰
【申请人】上海斐讯数据通信技术有限公司
【公开日】2016年2月24日
【申请日】2015年10月26日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1