服务至活动间的通信方法技术

技术编号:12912389 阅读:35 留言:0更新日期:2016-02-24 17:21
本发明专利技术涉及通信领域,尤其涉及一种服务至活动间的通信方法。一种服务至活动间的通信方法,可应用于安卓系统中,通信方法包括:步骤S1,服务产生事件;步骤S2,判断活动和待监听的服务是否处于同一个应用中;若是则执行步骤S3,否则直接执行步骤S4;步骤S3,在应用的主线程中构建服务与活动哈希表,活动对事件监听对应的服务;步骤S4,远程结合调用接口,进入活动管理服务组件后,匹配已经打开的服务列表,建立哈希表。

【技术实现步骤摘要】

本专利技术涉及通信领域,尤其涉及一种。
技术介绍
在Android(安卓)系统中,活动(Activity)负责前台界面的显示和管理,月艮 务(Service)负责没有界面的相关功能。当需要使用没有界面的相关功能时,通过定 义服务来完成,服务运行在主线程,没有任何界面显示。活动可以通过Android提供的 startservice (开始服务)函数来启动服务,如果服务已经启动,则通过开始服务可以传递 命令到服务中,服务收到该命令后,进行相关的功能操作。如果活动需要获取服务中相关数 据,活动可以绑定服务,从而来调用服务中提供的接口函数,获取服务中相关信息,调用服 务提供的对外接口函数,获取服务的相关数据和运行状态。活动处于主动地位,服务处于被 动地位。在服务的运行过程中,产生相关事件后,只能保存在服务实体中,等待活动主动来 获取相关事件和数据。服务没有办法主动通知对该服务感兴趣的相关活动。活动要想获得 服务的相关事件,只能通过不停查询的方式来调用服务提供的接口,效率低下,操作起来繁 琐,实时性也较差。
技术实现思路
由于整个活动与服务之间的操作过程均是活动主动,而服务处于被动地位,服务 完成了某些功能后,需要通过活动管理的界面进行显示相关结果时,需要活动定时去查询, 导致用户体验的效果欠佳。本专利技术提供了一套服务到活动间的通信方法,使得服务和活动 间的交互方便、高效、实时。 本专利技术采用如下技术方案: -种service至activity间的通信方法,应用于Android系统中,所述通信方法 包括: 步骤S1,所述service产生事件; 步骤S2,判断所述activity和待监听的所述service是否处于同一个应用中;若 是则执行步骤S3,否则直接执行步骤S4 ; 步骤S3,在所述应用的主线程中构建service与activity哈希表,所述activity 对所述事件监听对应的service ; 步骤S4,远程binder调用接口,进入activity manager service组件后,匹配已 经打开的service列表,建立所述哈希表。 对 Service 感兴趣的 Activity 需要 Listen (监听)对应的 Service,当 Service 产生相关事件后,通过Listen的Activity列表,将事件传递给对应的Activity进行处理。 Activity可以调用Listen Service函数还Listen对应的Service产生的事件,同样可 以调用 Unlisten (解监听)Service 函数解除对 Service 的 Listen。Listen Service 和 Unlisten Service两个函数在Activity中实现,作为Activity的基本接口函数,每个创 建的Activity均可以调用。在Listen Service函数中,首先判断Activity和要Listen 的Service是否处于同一个APP (应用)中,对于处于同一 APP中的Activity和Service, 直接在应用的Activity Thread(主线程)构建对应的哈希表,即一个Service对应多个 Activity 的哈希表,一个 Service 可以被多个 Activity 进行 Listen。Activity 和 Service 不处于同一 APP中的情况,贝通过IActivityManager远程Binder (结合)调用接口,进入系 统进程的 Activity Manager (管理)Service 组件,Activity Manager Service 负责管理和 维护所有打开的Service和Activity的生命周期,Activity Manager Service首先会匹配 已经打开的Service列表,确定Activity要Listen的Service是否已经创建,如果Service 没有打开,贝U直接返回,如果Service已经创建,贝建立该Service与Activity之间的哈希 表,一个Service对应多个Activity的哈希表,一个Service可以被多个Activity进行 Listen。 优选的,步骤S1还包括: 步骤S11,于所述步骤S1之后,调用send Event to activity函数发送所述事件 至 listen activity 中。 优选的,所述步骤S2具体包括: 步骤S21,进入service所在应用的主线程,查询与所述事件对应的哈希表,判断 是否在同一所述应用中有所述activity在监听所述service^ 当Service产生事件时,首先会进入Service所在APP的Activity Thread,去 查询对应的Service与Activity的哈希表,如果存在同一 APP中有Activity在Listen 该Service,则发送消息给Activity Thread,Activity Thread收到该消息后,调用对应 Activity的Service事件处理函数(Receive Service Event)对事件进行处理。同时通过 IActivityManager 远程 Binder 调用接口进入系统进程的 Activity Manager Service,查 询对应的Service与Activity的哈希表,确定是否有处于不同APP的Activity在Listen 该Service,然后通过IApplicatinThread远程Binder调用接口进入Activity所在APP的 Activity Thread 中,然后调用 Activity 的 Service事件处理函数Receive Service Event 对事件进行处理。这样就完成了 Service到Activity之间的通信过程。 优选的,所述步骤S2具体包括: 步骤S22,获取活动名(activity name),进入所述主线程的监听服务(listen service)函数; 步骤 S23,调用 service name ; 步骤S24,根据所述activity name、所述service name获取活动客户端记录 (activity client record)实体和所述 service 实体; 步骤S25,判断所述service name对应的所述service实体是否存在。 优选的,所述步骤S3具体包括: 步骤S31,创建所述service实体与所述活动客户端记录实体之间的哈希表。 优选的,所述步骤S4具体包括: 步骤S41,进入活动管理服务(activity manager service)组件后,通过所述服务 名(service name)判断是否能够从所述activity manager service组件中的哈希表中获 取对应的服务记录实体,若是则执行步骤S42,否则结束并提示出错; 步骤 S42 :通过所述 activity name 从所述 activity manager service 中获取对 应的活动记录(activity record)实体,建立所述服务记录(service record)本文档来自技高网...

【技术保护点】
一种服务至活动间的通信方法,其特征在于,应用于安卓系统中,所述通信方法包括:步骤S1,所述服务产生事件;步骤S2,判断所述活动和待监听的所述服务是否处于同一个应用中;若是则执行步骤S3,否则直接执行步骤S4;步骤S3,在所述应用的主线程中构建服务与活动哈希表,所述活动对所述事件监听对应的服务;步骤S4,远程结合调用接口,进入活动管理服务组件后,匹配已经打开的服务列表,建立所述哈希表。

【技术特征摘要】

【专利技术属性】
技术研发人员:田泽丰
申请(专利权)人:上海斐讯数据通信技术有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1