首页 > 专利 > 上海斐讯数据通信技术有限公司 > 一种窗口管理服务与APP间的通信通道建立方法和系统专利详情

一种窗口管理服务与APP间的通信通道建立方法和系统   0    0

有效专利 查看PDF
专利申请流程有哪些步骤?
专利申请流程图
申请
申请号:指国家知识产权局受理一件专利申请时给予该专利申请的一个标示号码。唯一性原则。
申请日:提出专利申请之日。
2014-12-04
申请公布
申请公布指发明专利申请经初步审查合格后,自申请日(或优先权日)起18个月期满时的公布或根据申请人的请求提前进行的公布。
申请公布号:专利申请过程中,在尚未取得专利授权之前,国家专利局《专利公报》公开专利时的编号。
申请公布日:申请公开的日期,即在专利公报上予以公开的日期。
2015-09-02
授权
授权指对发明专利申请经实质审查没有发现驳回理由,授予发明专利权;或对实用新型或外观设计专利申请经初步审查没有发现驳回理由,授予实用新型专利权或外观设计专利权。
2018-02-13
预估到期
发明专利权的期限为二十年,实用新型专利权期限为十年,外观设计专利权期限为十五年,均自申请日起计算。专利届满后法律终止保护。
2034-12-04
基本信息
有效性 有效专利 专利类型 发明专利
申请号 CN201410729607.3 申请日 2014-12-04
公开/公告号 CN104486389B 公开/公告日 2018-02-13
授权日 2018-02-13 预估到期日 2034-12-04
申请年 2014年 公开/公告年 2018年
缴费截止日 2022-01-04
分类号 H04L29/08G06F17/30G06F9/44 主分类号 H04L29/08
是否联合申请 独立申请 文献类型号 B
独权数量 1 从权数量 9
权利要求数量 10 非专利引证数量 1
引用专利数量 3 被引证专利数量 0
非专利引证 1、夏德冰等.Android 应用中一种Activity窗口管理系统《.计 算 机 系 统 应 用》.2012,第21卷(第6期),第224-227,248页.;
引用专利 CN103902390A、CN103558959A、CN103617078A 被引证专利
专利权维持 5 专利申请国编码 CN
专利事件 转让 事务标签 公开、实质审查、授权、权利转移
申请人信息
申请人 第一申请人
专利权人 上海斐讯数据通信技术有限公司 当前专利权人 台州市吉吉知识产权运营有限公司
发明人 田泽丰 第一发明人 田泽丰
地址 上海市松江区思贤路3666号 邮编 201616
申请人数量 1 发明人数量 1
申请人所在省 上海市 申请人所在市 上海市松江区
代理人信息
代理机构
专利代理机构是经省专利管理局审核,国家知识产权局批准设立,可以接受委托人的委托,在委托权限范围内以委托人的名义办理专利申请或其他专利事务的服务机构。
杭州千克知识产权代理有限公司 代理人
专利代理师是代理他人进行专利申请和办理其他专利事务,取得一定资格的人。
周希良
摘要
本发明提供一种窗口管理服务与APP间的通信通道建立方法和系统,应用于安卓系统,打开一个APP,创建一个IWindow接口实例和一个对应的Binder服务线程;每打开APP的一个Activity,生成对应的WindowID,并将Activity和WindowID添加到哈希表sActivityMap中;通过sWindowSession接口,调用窗口管理服务的会话服务,创建窗口状态实例,保存IWindow接口实例和WindowID到窗口状态实例中,将窗口状态实例和WindowID添加到哈希表sWindowMap中。本发明将窗口管理服务与APP间的多个IWindow通信通路简化为一条,提高了系统效率。
  • 摘要附图
    一种窗口管理服务与APP间的通信通道建立方法和系统
  • 说明书附图:图1
    一种窗口管理服务与APP间的通信通道建立方法和系统
  • 说明书附图:图2
    一种窗口管理服务与APP间的通信通道建立方法和系统
  • 说明书附图:图3
    一种窗口管理服务与APP间的通信通道建立方法和系统
  • 说明书附图:图4
    一种窗口管理服务与APP间的通信通道建立方法和系统
  • 说明书附图:图5
    一种窗口管理服务与APP间的通信通道建立方法和系统
  • 说明书附图:图6
    一种窗口管理服务与APP间的通信通道建立方法和系统
  • 说明书附图:图7
    一种窗口管理服务与APP间的通信通道建立方法和系统
法律状态
序号 法律状态公告日 法律状态 法律状态信息
1 2020-11-17 专利权的转移 登记生效日: 2020.11.04 专利权人由上海斐讯数据通信技术有限公司变更为台州市吉吉知识产权运营有限公司 地址由201616 上海市松江区思贤路3666号变更为318015 浙江省台州市椒江区洪家街道东环大道2388号农港城A区2-3167号
2 2018-02-13 授权
3 2015-09-02 实质审查的生效 IPC(主分类): H04L 29/08 专利申请号: 201410729607.3 申请日: 2014.12.04
4 2015-04-01 公开
权利要求
权利要求书是申请文件最核心的部分,是申请人向国家申请保护他的发明创造及划定保护范围的文件。
1.一种窗口管理服务与APP间的通信通道建立方法,应用于安卓系统,其特征在于,包括:
打开一个APP,获取sWindowSession接口,创建一个IWindow接口实例,同时创建一个对应的Binder服务线程,并静态保存IWindow接口实例;
针对所述APP,
打开所述APP的一个Activity,生成一个对应的WindowID,并将Activity和WindowID添加到哈希表sActivityMap中,且哈希表sActivityMap保存至所述APP中;
通过sWindowSession接口,附带IWindow接口实例和Activity对应的WindowID调用窗口管理服务的会话服务,创建窗口状态实例,保存IWindow接口实例和WindowID到窗口状态实例中,将窗口状态实例和WindowID添加到哈希表sWindowMap中,并将哈希表sWindowMap保存至窗口管理服务。

2.根据权利要求1所述的窗口管理服务与APP间的通信通道建立方法,其特征在于,与APP的Activity对应的WindowID是通过随机数的方式生成的。

3.根据权利要求2所述的窗口管理服务与APP间的通信通道建立方法,其特征在于,WindowID是整数数据类型的随机数。

4.根据权利要求2所述的窗口管理服务与APP间的通信通道建立方法,其特征在于,在通过随机数的方式生成WindowID时,判断生成的WindowID是否与APP中已存在的WindowID相同:如果相同,则重新通过随机数的方式生成新的WindowID;如果不相同,则将生成的WindowID作为Activity对应的WindowID。

5.根据权利要求1所述的窗口管理服务与APP间的通信通道建立方法,其特征在于,当窗口管理服务的窗口状态实例访问IWindow接口实例提供的服务时,要附带WindowID。

6.根据权利要求1所述的窗口管理服务与APP间的通信通道建立方法,其特征在于,哈希表sActivityMap中,Activity与WindowID是一一对应的;哈希表sWindowMap中,WindowID与窗口状态实例是一一对应的。

7.根据权利要求1所述的窗口管理服务与APP间的通信通道建立方法,其特征在于,在关闭所述APP的一个Activity时,从哈希表sActivityMap中删除该Activity和对应的WindowID;并通过sWindowSession接口,附带IWindow接口实例和Activity对应的WindowID调用窗口管理服务的会话服务,通过WindowID从哈希表sWindowMap中找到对应的窗口状态实例并释放。

8.一种窗口管理服务与APP间的通信通道建立系统,应用于安卓系统,其特征在于,包括:IWindow接口实例和Binder服务线程的创建单元、WindowID生成单元、窗口状态实例生成单元、哈希表生成单元和控制单元;
所述IWindow接口实例和Binder服务线程的创建单元用于根据APP创建IWindow接口实例和Binder服务线程;
所述WindowID生成单元用于针对同一个APP的不同Activity,生成对应的WindowID;
所述窗口状态实例生成单元用于通过sWindowSession接口,附带IWindow接口实例和Activity对应的WindowID调用窗口管理服务的会话服务,创建窗口状态实例;
所述哈希表生成单元用于生成哈希表sActivityMap和哈希表sWindowMap;
所述控制单元用于控制所述IWindow接口实例和Binder服务线程的创建单元、所述WindowID生成单元、所述窗口状态实例生成单元、所述哈希表生成单元。

9.根据权利要求8所述的窗口管理服务与APP间的通信通道建立系统,其特征在于,一个APP创建一个IWindow接口实例和一个Binder服务线程。

10.根据权利要求8所述的窗口管理服务与APP间的通信通道建立系统,其特征在于,哈希表sActivityMap是Activity与WindowID的对应列表,其保存在APP中;哈希表sWindowMap是窗口状态实例与WindowID的对应列表,其保存至窗口管理服务中。
说明书

技术领域

[0001] 本发明涉及通信领域,特别是涉及一种应用于安卓系统的窗口管理服务与APP间的通信通道建立方法和系统。

背景技术

[0002] 在现有的安卓(Android)系统中,打开一个APP(Application,应用程序)时,通过远程调用窗口管理服务(WindowManagerService)的会话开启函数(openSession函数),来获得APP访问窗口管理服务的会话(Session)服务的远程调用接口sWindowSession。窗口管理服务的会话开启函数创建sWindowSession远程调用接口,并且创建对应的Binder服务线程,用来监控APP发送过来的请求。当APP创建一个Activity时,会随之创建一个IWindow接口实例,并启动该IWindow接口实例对应Binder服务线程,之后通过sWindowSession接口访问窗口管理服务的会话服务,将IWindow接口实例传递到窗口管理服务,窗口管理服务会创建窗口状态(WindowState)实例,保存IWindow接口实例,与Activity进行对应。窗口状态实例可以通过IWindow接口实例访问APP提供的各种服务。在Activity关闭时,需要关闭IWindow接口实例以及对应的Binder服务线程。
[0003] 具体来讲,安卓系统打开一个APP时,通过远程调用窗口管理服务中的会话开启函数获得一个IWindowSession的IBinder远程调用接口实例sWindowSession,会话开启函数会开启一个Binder服务线程,专门处理该sWindowSession传递过来的请求。由于每个APP都会调用会话开启函数来获取IWindowSession的IBinder远程调用接口实例sWindowSession,这样系统打开了多少个APP,窗口管理服务就会开启多少个Binder服务线程,用来监控和处理APP通过sWindowSession接口传递过来的请求,窗口管理服务通过Session.java实现sWindowSession接口对应的相关服务。从而建立起APP到窗口管理服务之间的通信通道。
[0004] 并且,如图1所示,每个APP中会打开多个Activity,该APP下的所有Activity都会共用一个sWindowSession接口。当打开一个Activity时,应用主线程都会创建一个IWindow对象,并保存到Activity中,同时启动一个Binder服务线程,该服务线程用来监控和处理IWindow对象传递过来的服务和请求。接下来通过sWindowSession接口提供的服务函数,将IWindow对象传递到窗口管理服务中,窗口管理服务创建窗口状态实例,与APP打开的Activity一一对应,窗口状态实例对象保存传递过来的IWindow对象,从而建立窗口管理服务到APP的Activity之间的通信通道。同时窗口管理服务中建立一个IWindow与窗口状态实例对应的哈希表mWindowMap,当APP的Acitivity通过sWindowSession调用窗口管理服务的会话服务时,只需要传递IWindow对象过来,窗口管理服务就可以通过该IWindow实例从哈希表mWindowMap中找到窗口状态实例,从而完成相关的功能调用。当窗口管理服务完成相关功能后,通过IWindow接口实例调用Activity提供的远程服务(在Activity创建IWindow对象时,已经启动Binder服务线程,用来监控和处理窗口管理服务,并通过IWindow接口实例传递过来的请求)。当APP关闭一个Activity时,需要通过sWindowSession接口通知窗口管理服务,窗口管理服务的会话服务收到对应的请求后,释放Activity对应的窗口状态实例的相关操作,并且从哈希表mWindowMap中解除IWindow接口实例与窗口状态实例之间的对应关系,同时Activity关闭IWindow接口实例对应Binder服务线程,释放占用的系统资源。
[0005] 从图1不难看出,在在APP与窗口管理服务之间的通信通道中,窗口管理服务针对每个APP,只需要创建一个Binder服务线程,APP下的所有Activity共用一个sWindowSession远程调用接口来使用窗口管理服务提供的会话服务,每个sWindowSession远程调用都需要带IWindow参数,这样窗口管理服务的会话服务就可以通过IWindow参数从从哈希表mWindowMap中找到窗口状态实例,从而完成对应的功能。
[0006] 如图2所示,在窗口管理服务到APP的通信通道中,每个Activity在创建IWindow远程调用接口时,都会创建一个Binder服务线程来监控和处理传递过来的请求和服务,而创建这么多Binder服务线程的目的仅仅只是为了方便窗口管理服务中的窗口状态实例(Activity在窗口管理服务中的映射)调用时能够更直接的对应到APP中的Activity,而不是为了系统的优化。
[0007] 实际上在安卓系统中,APP与窗口管理服务的交互并不是太频繁,完全不需要每个Activity都需要一个IWindow接口实例和Binder服务线程,只要在窗口管理服务端通过一个Binder线程就能够处理APP过来的请求和服务,同样在APP端也只需要一个Binder线程就能够处理窗口管理服务过来的请求和服务。但是现有的技术并不支持窗口管理服务到APP之间的但IWindow接口实例访问功能。

发明内容

[0008] 鉴于以上所述现有技术的缺点,本发明的目的在于提供一种窗口管理服务与APP间的通信通道建立方法和系统,用于解决现有技术中不支持窗口管理服务到APP之间的单IWindow接口实例访问功能的问题。
[0009] 为实现上述目的及其他相关目的,本发明提供一种窗口管理服务与APP间的通信通道建立方法,应用于安卓系统,包括:打开一个APP,获取sWindowSession接口,创建一个IWindow接口实例,同时创建一个对应的Binder服务线程,并静态保存IWindow接口实例;针对所述APP,打开所述APP的一个Activity,生成一个对应的WindowID,并将Activity和WindowID添加到哈希表sActivityMap中,且哈希表sActivityMap保存至所述APP中;通过sWindowSession接口,附带IWindow接口实例和Activity对应的WindowID调用窗口管理服务的会话服务,创建窗口状态实例,保存IWindow接口实例和WindowID到窗口状态实例中,将窗口状态实例和WindowID添加到哈希表sWindowMap中,并将哈希表sWindowMap保存至窗口管理服务。
[0010] 可选地,与APP的Activity对应的WindowID是通过随机数的方式生成的。
[0011] 可选地,WindowID是整数数据类型的随机数。
[0012] 可选地,在通过随机数的方式生成WindowID时,判断生成的WindowID是否与APP中已存在的WindowID相同:如果相同,则重新通过随机数的方式生成新的WindowID;如果不相同,则将生成的WindowID作为Activity对应的WindowID。
[0013] 可选地,当窗口管理服务的窗口状态实例访问IWindow接口实例提供的服务时,要附带WindowID。
[0014] 可选地,哈希表sActivityMap中,Activity与WindowID是一一对应的;哈希表sWindowMap中,WindowID与窗口状态实例是一一对应的。
[0015] 可选地,在关闭所述APP的一个Activity时,从哈希表sActivityMap中删除该Activity和对应的WindowID;并通过sWindowSession接口,附带IWindow接口实例和Activity对应的WindowID调用窗口管理服务的会话服务,通过WindowID从哈希表sWindowMap中找到对应的窗口状态实例并释放。
[0016] 一种窗口管理服务与APP间的通信通道建立系统,应用于安卓系统,包括:IWindow接口实例和Binder服务线程的创建单元、WindowID生成单元、窗口状态实例生成单元、哈希表生成单元和控制单元;所述IWindow接口实例和Binder服务线程的创建单元用于根据APP创建IWindow接口实例和Binder服务线程;所述WindowID生成单元用于针对同一个APP的不同Activity,生成对应的WindowID;所述窗口状态实例生成单元用于通过sWindowSession接口,附带IWindow接口实例和Activity对应的WindowID调用窗口管理服务的会话服务,创建窗口状态实例;所述哈希表生成单元用于生成哈希表sActivityMap和哈希表sWindowMap;所述控制单元用于控制所述IWindow接口实例和Binder服务线程的创建单元、所述WindowID生成单元、所述窗口状态实例生成单元、所述哈希表生成单元。
[0017] 可选地,一个APP创建一个IWindow接口实例和一个Binder服务线程。
[0018] 可选地,哈希表sActivityMap是Activity与WindowID的对应列表,其保存在APP中;哈希表sWindowMap是窗口状态实例与WindowID的对应列表,其保存至窗口管理服务中。
[0019] 如上所述,本发明的窗口管理服务与APP间的通信通道建立方法和系统,窗口管理服务和APP之间引入了WindowID机制,将现有技术中的窗口管理服务和APP之间的多个IWindow通信通路简化成了一条通信通路,并且,通过WindowID机制完成了窗口管理服务的窗口状态实例与APP的Activity之间的映射。本发明具有以下有益效果:
[0020] 1)本发明的APP只需要建立一个IWindow的Binder服务线程,大量减少底层系统的Binder开销,增强系统效率,特别是在很多Activity打开的情况下;
[0021] 2)通过WindowID机制更加方便简洁的完成窗口管理服务的窗口状态实例与APP的Activity之间的映射;
[0022] 3)由于WindowID机制的引入,Activity在打开和关闭时,操作更为简便和优化。

实施方案

[0039] 以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
[0040] 请参阅图3至图7。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0041] 为了完成一个APP只需一个Binder线程就能够处理窗口管理服务过来的请求和服务的功能,本发明的窗口管理服务与APP间的通信通道建立方法和系统在APP打开时就创建IWindow接口实例,同时创建了对应的Binder服务线程,用来监控窗口管理服务的请求和服务,这样在之后每打开一个Activity时,不再需要创建新的IWindow接口实例和对应的Binder服务线程,但是需要生成一个WindowID,每个Activity都对应不同的WindowID,并且通过sWindowSession远程调用接口,调用窗口管理服务的会话服务,将IWindow接口实例和WindowID传递到窗口管理服务中,窗口管理服务收到请求后,创建窗口状态实例来与Activity进行对应,保存IWindow接口实例和WindowID,并且建立WindowID和WindowState实例对应的哈希表sWindowMap。后续的APP中的各组件通过sWindowSession远程接口调用窗口管理服务中的会话服务时,都附带WindowID参数,会话服务线程通过该WindowID参数从哈希表sWindowMap中找到对应的窗口实例,来完成相应的功能和服务。由于窗口状态实例中保存了IWindow远程接口和WindowID,直接使用该远程接口请求APP提供的IWindow服务,所有的请求都要附带WindowID,应用IWindow对应的Binder服务线程收到请求后,通过WindowID找到对应的Activity,完成相应的功能和服务。
[0042] 实施例1
[0043] 本实施例公开了一种应用于安卓系统的窗口管理服务与APP间的通信通道建立方法,如图3所示,包括:
[0044] 步骤S31,打开一个APP,获取sWindowSession接口,创建一个IWindow接口实例,同时创建一个对应的Binder服务线程,并静态保存IWindow接口实例:
[0045] 在APP创建时,系统会通过远程调用接口调用窗口管理服务的会话开启函数。在会话开启函数中,窗口管理服务会创建会话服务的接口实例sWindowSession,并启动会话服务对应的Binder服务线程,之后将sWindowSession接口返回到APP中,APP以静态的方式保存sWindowSession接口。
[0046] 如此,APP的各组件都可以通过sWindowSession接口访问窗口管理服务的会话服务,其中,会话服务主要提供对Activity在窗口管理服务中的映射窗口状态实例的管理和操作,包括窗口布局、输入法管理、墙纸等等,本发明只是针对APP和窗口管理服务之间的通信通路,关于会话服务的具体的功能就不再详述。
[0047] 获取sWindowSession接口,建立从APP到窗口管理服务的会话服务之间的通信通路时,APP同时需要创建IWindow接口实例,创建IWindow对应的Binder服务线程,静态保存IWindow接口实例。此时还没有Activity创建,仅仅只需要保存IWindow接口实例,当Activity创建时,再使用IWindow接口实例。
[0048] 步骤S32,针对一个APP,打开APP的一个Activity,生成一个对应的WindowID,并将Activity和WindowID添加到哈希表sActivityMap中,且哈希表sActivityMap保存至APP中:
[0049] 由于安卓系统的现有方案是通过多IWindow接口实例来完成窗口管理服务到APP的Activity之间的映射,当只有一个IWindow接口实例时,需要建立标识WindowID来与Activity和窗口状态实例进行一一对应的操作。WindowID是通过随机数的方式生成的,具体流程如图4所示,包括:
[0050] 步骤S41,打开一个Activity;
[0051] 步骤S42,生成一个INT型的随机数;;
[0052] 步骤S43,检索已经打开的Activity对应的WindowID,判断生成的随机数是否与已存在的WindowID相同:如果相同,则重新返回步骤S41,;如果不同,则跳转至步骤S44;
[0053] 步骤S44,将该随机数作为Activity对应的WindowID,并将Activity和WindowID添加到哈希表sActivityMap中。
[0054] 通过随机数的方式生成WindowID,生成随机数后,通过搜索已经存在的WindowID,确保WindowID不冲突,然后将Activity和WindowID添加到哈希表sActivityMap中,该哈希表在IWindow服务线程中会用到,用来完成窗口状态实例到Activity之间的映射。
[0055] 步骤S33,通过sWindowSession接口,附带IWindow接口实例和Activity对应的WindowID调用窗口管理服务的会话服务,创建窗口状态实例,保存IWindow接口和WindowID到窗口状态实例中,将窗口状态实例和WindowID添加到哈希表sWindowMap中,并将哈希表sWindowMap保存至窗口管理服务:
[0056] 当WindowID生成后,通过sWindowSession接口调用窗口管理服务的会话服务,附带IWindow接口实例和Activity对应的WindowID。会话服务收到该请求后,创建窗口状态实例,保存IWindow接口和WindowID到窗口状态实例中,将窗口状态实例和WindowID添加到哈希表sWindowMap中。其中,哈希表sWindowMap是窗口状态实例与WindowID的对应列表。此时APP完成了Activity的创建,WindowManagerService完成了窗口状态实例创建,APP中保存了Activity与WindowID对应的哈希表sActivityMap,WindowManagerService保存了WindowState与WindowID对应的哈希表sWindowMap,WindowState还保存了IWindow接口实例,可以访问APP提供的IWindow服务。
[0057] 对于APP到窗口管理服务之间的通信通道,在现有系统中,APP各组件通过sWindowSession接口访问窗口管理服务的会话服务时,都需要附带IWindow接口实例,每个Activity都会创建对应IWindow接口实例,窗口管理服务的会话服务通过IWindow接口实例从哈希表sWindowMap中找到对应的WindowState实例,从而来完成相应的功能和服务。
[0058] 在本实施例中,如图5所示,APP的所有组件共用一个IWindow接口实例,和一个Binder服务线程,通过sWindowSession接口访问窗口管理服务的会话服务时,都需要附带WindowID,窗口管理服务的会话服务通过WindowID从哈希表sWindowMap中找到对应的窗口状态实例,从而来完成响应的功能和服务。
[0059] 对于窗口管理服务到APP之间的通信通道,在现有系统中,由于每个Activity都有对应IWindow接口实例和Binder服务线程,窗口管理服务的窗口状态实例组件与Activity是一一对应,直接通过IWindow接口就可以访问到Activity提供的服务,不需要进行任何分类操作。
[0060] 在本实施例中,如图6所示,APP各组件共用一个IWindow接口实例,窗口管理服务的窗口状态实例组件访问IWindow接口实例提供的服务时,需要附带WindowID参数,APP层面的IWindow对应的Binder服务线程通过WindowID参数从哈希表sActivityMap中找到对应的Activity实例,从而完成相应的功能和服务。
[0061] 在本实施例中,由于增加了WindowID机制,所以在关闭Activity时,需要释放WindowID。在APP关闭Activity时,需要从哈希表sActivityMap列表中删除该Activity和WindowID对应的组合,还需通过sWindowSession接口远程调用窗口管理服务的会话服务,附带对应的WindowID作为参数,会话服务收到该请求后,通过WindowID从哈希表sWindowMap中找到对应的窗口状态实例,进行相关的释放操作,最后从哈希表sWindowMap列表中删除该窗口状态实例和WindowID对应的组合,从而完成WindowID的释放工作。而现有系统每个Activity都有自己的IWindow接口和Binder服务线程,关闭一个Activity时,需要释放对应的IWindow接口以及关闭Binder服务线程,甚为繁琐。
[0062] 上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包含相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
[0063] 此外,为了突出本发明的创新部分,本实施例中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施例中不存在其它的单元。
[0064] 本实施例将窗口管理服务到APP之间的多个IWindow通信通路简化成一条通信通路,提高了系统效率;并引入了WindowID机制,通过WindowID机制来完成窗口管理服务的窗口状态实例与APP的Activity之间的映射;并且APP的Activity在打开和关闭时,操作更为简便和优化。
[0065] 实施例2
[0066] 本实施例还公开了一种应用于安卓系统的窗口管理服务与APP间的通信通道建立系统700,如图7所示,包括IWindow接口实例和Binder服务线程的创建单元710、WindowID生成单元720、窗口状态实例生成单元730、哈希表生成单元740和控制单元750。
[0067] IWindow接口实例和Binder服务线程的创建单元710用于根据APP创建IWindow接口实例和Binder服务线程。在APP创建时,获取sWindowSession接口,建立从APP到窗口管理服务的会话服务之间的通信通路,APP同时需要创建一个IWindow接口实例,创建IWindow对应的Binder服务线程,静态保存IWindow接口实例;即一个APP对应一个IWindow接口实例和一个Binder服务线程。
[0068] WindowID生成单元720用于针对同一个APP的不同Activity,生成对应的WindowID。当只有一个IWindow接口实例时,需要建立标识WindowID来与Activity和窗口状态实例进行一一对应的操作;且WindowID是通过随机数的方式生成的。
[0069] 窗口状态实例生成单元730用于通过sWindowSession接口,附带IWindow接口实例和Activity对应的WindowID调用窗口管理服务的会话服务,创建窗口状态实例。当WindowID生成后,通过sWindowSession接口调用窗口管理服务的会话服务,附带IWindow接口实例和Activity对应的WindowID。会话服务收到该请求后,创建窗口状态实例,保存IWindow接口和WindowID到窗口状态实例中。
[0070] 哈希表生成单元740用于生成哈希表sActivityMap和哈希表sWindowMap。其中哈希表sActivityMap是根据WindowID生成单元720而生成的Activity与WindowID的对应列表,其保存在APP中;哈希表sWindowMap是根据窗口状态实例生成单元730生成的窗口状态实例与WindowID的对应列表,其保存至窗口管理服务中。
[0071] 控制单元750用于控制IWindow接口实例和Binder服务线程的创建单元710、WindowID生成单元720、窗口状态实例生成单元730和哈希表生成单元740,控制APP的创建,APP的Activity的打开和关闭,以及在关闭Activity时,控制哈希表生成单元740释放关闭Activity所对应的WindowID在哈希表sActivityMap和哈希表sWindowMap中的组合。
[0072] 需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的单元,而非按照实际实施时的单元,其实际实施时各个单元可为一种随意的组合和改变,且其组件布局型态也可能更为复杂。
[0073] 此外,为了突出本发明的创新部分,本实施例中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施例中不存在其它的单元。
[0074] 并且,不难发现,本实施例为与第一实施例相对应的系统实施例,本实施例可与第一实施例互相配合实施。第一实施例中提到的相关技术细节在本实施例中依然有效,为了减少重复,这里不再赘述。相应地,本实施例中提到的相关技术细节也可应用在第一实施例中。
[0075] 综上所述,本发明的窗口管理服务与APP间的通信通道建立方法和系统,窗口管理服务和APP之间引入了WindowID机制,将现有技术中的窗口管理服务和APP之间的多个IWindow通信通路简化成了一条通信通路,并且,通过WindowID机制完成了窗口管理服务的窗口状态实例与APP的Activity之间的映射。本发明的APP只需要建立一个IWindow的Binder服务线程,大量减少底层系统的Binder开销,增强系统效率,特别是在很多Activity打开的情况下;并且本发明通过WindowID机制更加方便简洁的完成窗口管理服务的窗口状态实例与APP的Activity之间的映射;而且由于WindowID机制的引入,Activity在打开和关闭时,操作更为简便和优化。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
[0076] 上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

附图说明

[0023] 图1显示为现有技术中的APP到窗口管理服务之间的通信通道示意图。
[0024] 图2显示为现有技术中的窗口管理服务到APP之间的通信通道示意图。
[0025] 图3显示为本发明的实施例公开的窗口管理服务与APP间的通信通道建立方法的流程示意图。
[0026] 图4显示为本发明的实施例公开的窗口管理服务与APP间的通信通道建立方法中生成WindowID的流程示意图。
[0027] 图5显示为使用本发明实施例公开的窗口管理服务与APP间的通信通道建立方法建立的APP到窗口管理服务之间的通信通道示意图。
[0028] 图6显示为使用本发明实施例公开的窗口管理服务与APP间的通信通道建立方法建立的窗口管理服务到APP之间的通信通道示意图。
[0029] 图7显示为本发明实施例公开的窗口管理服务与APP间的通信通道建立系统的结构示意图。
[0030] 元件标号说明
[0031] S31~S33  步骤
[0032] S41~S44  步骤
[0033] 700       窗口管理服务与APP间的通信通道建立系统
[0034] 710       IWindow接口实例和Binder服务线程的创建单元
[0035] 720       WindowID生成单元
[0036] 730       窗口状态实例生成单元
[0037] 740       哈希表生成单元
[0038] 750       控制单元
版权所有:盲专网 ©2023 zlpt.xyz  蜀ICP备2023003576号