买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】Android中异步通信工具设计方法_武汉斗鱼网络科技有限公司_201810724905.1 

申请/专利权人:武汉斗鱼网络科技有限公司

申请日:2018-07-04

公开(公告)日:2021-04-27

公开(公告)号:CN109246177B

主分类号:H04L29/08(20060101)

分类号:H04L29/08(20060101);H04L29/06(20060101);G06F9/50(20060101)

优先权:

专利状态码:有效-授权

法律状态:2021.04.27#授权;2019.02.19#实质审查的生效;2019.01.18#公开

摘要:本公开提供一种Android中异步通信工具的设计方法,包括:定义DyHandler类;定义生产DyHandler对象的getDyHandlerClasscls函数;定义Map集合,用于表示cls与DyHandler类的映射关系;在根据cls产生DyHandler对象时,判定cls是否存在于Map集合中,存在,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数获得DyHandler对象;当不再使用DyHandler对象时,将DyHandler对象从Map集合中删除。该方法解决了Handler使用繁琐及内存泄漏的问题。

主权项:1.一种Android系统中异步通信工具的实现方法,包括:S1,定义DyHandler类,该DyHandler类的对象具有异步通信功能,其中,该DyHandler类中包括用于进行消息传输的协议栈和消息传输的对象mListener,将所述对象mListener赋值为入参参数listener,构建所述对象mListener与调用函数消息接受的引用关系,再通过协议栈将消息传输给调用函数的对象;S2,定义生产DyHandler对象的getDyHandlerClasscls函数,其中,cls为产生DyHandler对象的调用参数;S3,定义Map集合,其中,所述Map集合的mMap对象用于表示所述调用参数cls与根据该调用参数cls所产生的DyHandler对象的映射关系;S4,在根据调用参数cls产生DyHandler对象时,判定调用参数cls是否存在于所述Map集合的mMap对象中,如果是,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数来获得DyHandler对象;S5,当不再使用所述DyHandler对象时,将所述DyHandler对象从所述mMap对象中删除。

全文数据:Android中异步通信工具设计方法技术领域本公开涉及通信技术领域,尤其涉及一种Android中异步通信工具设计方法。背景技术传统方案中异步通信使用的是Android系统提供的一个Handler工具类来进行通信的,由于该方案中存在Handler的使用比较频繁,并且需要实例化对象及对消息回调的处理等问题,使得其使用起来非常繁琐,并且当对消息不能够及时释放的时候,就很容易产生内存泄漏的问题,从而导致内存被大量占用而不释放,导致其他业务无法申请到相应的内存空间,从而出现异常。发明内容针对传统方案中现有的技术问题,本发明提供一种Android系统中异步通信工具的设计方法及Android电子设备,用于解决来传统方案中Handler使用难度大导致的异步通信使用繁琐及Handler中对消息释放不及时导致内存泄漏从而导致内存被大量占用致使其他业务无法申请到相应的内存空间的问题。本公开提供了一种Android系统中异步通信工具的设计方法,包括:定义DyHandler类;定义生产DyHandler对象的getDyHandlerClasscls函数,其中,cls为产生DyHandler对象的调用参数;定义Map集合,其中,所述Map集合的mMap对象用于表示所述调用参数cls与根据该调用参数cls所产生的DyHandler对象的映射关系;在根据调用参数cls产生DyHandler对象时,判定调用参数cls是否存在于所述Map集合的mMap对象中,如果是,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数来获得DyHandler对象;当不再使用所述DyHandler对象时,将所述DyHandler对象从所述mMap对象中删除。可选地,该DyHandler类中包括用于进行消息传输的协议栈和消息传输的对象mListener,将所述对象mListener赋值为入参参数listener,构建所述对象mListener与调用函数消息接受的引用关系,再通过协议栈将消息传输给调用函数的对象。可选地,该getDyHandlerClasscls函数为所述DyHandler类中的静态函数。可选地,在调用getDyHandlerClasscls函数得到DyHandler对象时,判断所述调用参数cls是否为空,如果是则返回,否则获取该DyHandler对象。可选地,将所述DyHandler对象从所述mMap对象中删除,包括:通过调用mMap对象中的mMap.removecls方法来将所述DyHandler对象进行释放。本公开的另一个方面提供了一种Android电子设备,包括:处理器和存储器,存储器存储有计算机可执行程序,该程序在被所述处理器执行时,使得所述处理器执行:定义DyHandler类;定义生产DyHandler对象的getDyHandlerClasscls函数,其中,cls为产生DyHandler对象的调用参数;定义Map集合,其中,所述Map集合的mMap对象用于表示所述调用参数cls与根据该调用参数cls所产生的DyHandler对象的映射关系;在根据调用参数cls产生DyHandler对象时,判定调用参数cls是否存在于所述Map集合的mMap对象中,如果是,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数来获得DyHandler对象;当不再使用所述DyHandler对象时,将所述DyHandler对象从所述mMap对象中删除。可选地,处理器将所述对象mListener赋值为入参参数listener,构建所述对象mListener与调用函数消息接受的引用关系,再通过协议栈将消息传输给调用函数的对象。可选地,该getDyHandlerClasscls函数为所述DyHandler类中的静态函数。可选地,处理器调用getDyHandlerClasscls函数得到DyHandler对象时,判断所述调用参数cls是否为空,如果是则返回,否则获取该DyHandler对象。可选地,在处理器将所述DyHandler对象从所述mMap对象中删除,包括:通过调用mMap对象中的mMap.removecls方法来将所述DyHandler对象进行释放。本公开提供了一种Android中异步通信工具的设计方法及Android电子设备,通过这一系列的设计手段,解决了传统方案中Handler使用繁琐的问题,有效的提升了异步通信使用的便捷性,同时,有效的保证系统内存能够正常的被释放,解决了消息释放不及时导致内存泄漏从而导致内存被大量占用致使其他业务无法申请到相应的内存空间的问题。附图说明为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:图1示意性示出了根据本公开实施例提供的Android系统中异步通信工具的设计方法的流程图。图2示意性示出了根据本公开实施例提供的Android电子设备。具体实施方式以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。在此使用的所有术语包括技术和科学术语具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和或具有A、B、C的系统等。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“A或B”应当被理解为包括“A”或“B”、或“A和B”的可能性。附图中示出了一些方框图和或流程图。应理解,方框图和或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和或流程图中所说明的功能操作的装置。因此,本公开的技术可以硬件和或软件包括固件、微代码等的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘HDD;光存储装置,如光盘CD-ROM;存储器,如随机存取存储器RAM或闪存;和或有线无线通信链路。本公开的实施例提供了一种Android系统中异步通信工具的实现方法包括:定义DyHandler类;定义生产DyHandler对象的getDyHandlerClasscls函数,其中,cls为产生DyHandler对象的调用参数;定义Map集合,其中,Map集合的mMap对象用于表示调用参数cls与根据该调用参数cls所产生的DyHandler类的映射关系;在根据调用参数cls产生DyHandler对象时,判定调用参数cls是否存在于Map集合的mMap对象中,如果是,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数来获得DyHandler对象;当不再使用DyHandler对象时,将DyHandler对象从mMap对象中删除,。图1示意性示出了根据本公开实施例提供的Android系统中异步通信工具的设计方法的流程图。如图1所示,具体方法包括如下操作:S1,定义DyHandler类,该DyHandler类的对象具有异步通信功能。在上述操作S1中,具体采用publicclassDyHandlerTextendsHandler的方法定义DyHandler类,使得该DyHandler类继承了Android系统提供的Handler类,其中,在定义DyHandler类时,采用泛型技术为DyHandler提供一个泛型参数T,这种在定义时给定泛型参数T的方式便于后续的实现过程中对T进行相应的约束和操作。另外,在DyHandler类中定义了一个消息透传的协议栈MessageListener,用于后期对系统Handler相关消息进行透传而设计,该协议栈与系统Handler消息透传的协议栈是一致的,具体设计方法为:publicinterfaceMessageListener{voidmagicHandleMessageMessagemsg}其中,该协议栈MessageListener包含唯一一个协议方法magicHandleMessage,该协议方法magicHandleMessage包含一个Message类型的参数,且返回值是void,即透传协议的设计需要保证这样几个特点:其一是返回值是void,其二是入参参数一定是Message类型的参数,这样协议方法在入参和返回结果上保持一致的,才能保证后续的消息透传设计。同时,在DyHandler类中还定义了一个透传协议的对象mListener,即消息传输的对象,具体定义方法是DyHandler.MessageListenermListener,然后采用方法setOnMessageListener函数将对象mListener赋值为入参参数对象listener。具体定义如下:publicvoidsetOnMessageListenerDyHandler.MessageListenerlistener{this.mListener=listener;}通过这种方式实现对象mListener与调用函数的消息接受的引用关系,最终通过协议栈MessageListener将消息透传到调用函数的对象中去。S2,定义生产DyHandler对象的getDyHandlerClasscls函数,其中,cls为产生DyHandler对象的调用参数。在上述S2操作中,构建函数publicclassDyHandlergetDyHandlerClasscls{}生产DyHandler对象,函数名称为getDyHandler。因构建的函数为public公有类型的函数,则其他函数具有调用该函数的权限,且该函数为static静态函数,这样就能直接通过类而无需通过对象来调用该函数,提高了其调用的便捷性。另外,getDyHandler函数包含一个DyHandler类型的返回值,返回生产好的DyHandler对象,getDyHandler函数具有一个class类型的参数cls,为产生DyHandler对象的调用参数。getDyHandler函数的具体实现方式为:首先判断cls是否为空,具体是通过调用cls=null的方式进行判定,如果表达式的值为true,那么表示cls为null,否则表示cls为非null,如果是null直接通过return进行返回,如果是非null,则进行下一步构造。S3,定义Map集合,其中,所述Map集合的mMap对象用于表示调用参数cls与根据该调用参数cls所产生的DyHandler对象的映射关系。在上述操作S3中,具体定义Map集合的方法为MapClassDyHandlermMap,该集合包含Class和DyHandler类型的两个泛型参数,这种设计主要用于构建调用参数cls与根据该调用参数cls所产生的DyHandler类的映射关系,避免多次实例化多个对象。另外,在定义好mMap需要对mMap对象进行实例化操作,具体方实例化方法是通过调用HashMap的构造函数MapClassDyHandlermMap=newHashMapClass,DyHandler;来对其进行实例化处理。S4,在根据调用参数cls产生DyHandler对象时,判定调用参数cls是否存在于所述Map集合的mMap对象中,如果是,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数来获得DyHandler对象。在上述操作S4中,需要判定mMap对象中是否已经实例化过class对应的DyHandler对象,即调用参数cls是否存在于mMap对象中。首先判断cls是否为空,若为null则返回,否则采用mMap.containscls方法判断cls是否存在于mMap对象中,如果该函数返回值为true,表示已经实例化DyHandler对象,此时直接通过调用mMap.getcls方法来取出实例化过的对象mDyHandler,然后returnmDyHandler将实例化过的对象mDyHandler返回,如果该函数返回值为false,表示曾经没有实例化过class对应的DyHandler对象,此时需要调用DyHandler构造函数对DyHandler对象进行实例化操作,具体是通过调用DyHandlermDyHandler=newDyHandler,然后通过调用mMap.putcls,mDyHandler构建实例化过的对象mDyHandler与参数cls的映射关系并存储到mMap对象中,在通过returnmDyHandler将实例化过的对象mDyHandler返回。S5,当不再使用所述DyHandler对象时,将所述DyHandler对象从所述mMap对象中删除。在上述操作S5中,通过调用mMap对象中的mMap.removecls方法来将所述DyHandler对象进行释放,避免mMap对象持有cls对象的DyHandler对象,断开了DyHandler对象与mMap对象的引用关系,这样系统的垃圾回收机制就能够在恰当的时间对其进行回收处理,从而避免内存泄漏的问题,保证系统内存能够被正常释放,避免系统出现内存不足的问题,其他业务就能申请到相应的内存空间。综上所述,本公开提供了一种Android中异步通信工具的设计方法及Android电子设备,方法包括:定义DyHandler类;定义生产DyHandler对象的getDyHandlerClasscls函数,其中,cls为产生DyHandler对象的调用参数;定义Map集合,其中,所述Map集合的mMap对象用于表示所述调用参数cls与根据该调用参数cls所产生的DyHandler对象的映射关系;在根据调用参数cls产生DyHandler对象时,判定调用参数cls是否存在于所述Map集合的mMap对象中,如果是,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数来获得DyHandler对象;当不再使用所述DyHandler对象时,将所述DyHandler对象从所述mMap对象中删除,通过这一系列的设计手段,解决了传统方案中Handler使用繁琐的问题,有效的提升了异步通信使用的便捷性,同时,有效的保证系统内存能够正常的被释放,解决了消息释放不及时导致内存泄漏从而导致内存被大量占用致使其他业务无法申请到相应的内存空间的问题。需要注意的是,图1所示仅为可以应用本公开实施例的场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。本公开提供了一种异步通信的Android电子设备,如图2所示,Android电子设备200包括处理器210和计算机可读存储介质220。该Android电子设备200可以执行根据图1所示的本公开实施例的方法。具体地,处理器210例如可以包括通用微处理器、指令集处理器和或相关芯片组和或专用微处理器例如,专用集成电路ASIC,等等。处理器210还可以包括用于缓存用途的板载存储器。处理器210可以是用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。计算机可读存储介质220,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘HDD;光存储装置,如光盘CD-ROM;存储器,如随机存取存储器RAM或闪存;和或有线无线通信链路。计算机可读存储介质220可以包括计算机程序221,该计算机程序221可以包括代码计算机可执行指令,其在由处理器210执行时使得处理器210执行根据本公开实施例的方法或其任何变形。计算机程序221可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序221中的代码可以包括至少一个程序模块,例如包括模块221A、模块221B、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器210执行时,使得处理器210可以执行根据本公开实施例的方法或其任何变形。根据本公开实施例的方法根据本公开的实施例,计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器RAM、只读存储器ROM、可擦式可编程只读存储器EPROM或闪存、光纤、便携式紧凑磁盘只读存储器CD-ROM、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、射频信号等等,或者上述的任意合适的组合。附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。本领域技术人员可以理解,本公开的各个实施例和或权利要求中记载的特征可以进行多种组合或或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和或权利要求中记载的特征可以进行多种组合和或结合。所有这些组合和或结合均落入本公开的范围。尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。

权利要求:1.一种Android系统中异步通信工具的实现方法,包括:S1,定义DyHandler类,该DyHandler类的对象具有异步通信功能;S2,定义生产DyHandler对象的getDyHandlerClasscls函数,其中,cls为产生DyHandler对象的调用参数;S3,定义Map集合,其中,所述Map集合的mMap对象用于表示所述调用参数cls与根据该调用参数cls所产生的DyHandler对象的映射关系;S4,在根据调用参数cls产生DyHandler对象时,判定调用参数cls是否存在于所述Map集合的mMap对象中,如果是,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数来获得DyHandler对象;S5,当不再使用所述DyHandler对象时,将所述DyHandler对象从所述mMap对象中删除。2.根据权利要求1所述的方法,其中,该DyHandler类中包括用于进行消息传输的协议栈和消息传输的对象mListener,将所述对象mListener赋值为入参参数listener,构建所述对象mListener与调用函数消息接受的引用关系,再通过协议栈将消息传输给调用函数的对象。3.根据权利要求1所述的方法,还包括:该getDyHandlerClasscls函数为所述DyHandler类中的静态函数。4.根据权利要求1所述的方法,还包括:在所述操作4中,调用getDyHandlerClasscls函数得到DyHandler对象时,判断所述调用参数cls是否为空,如果是则返回,否则获取该DyHandler对象。5.根据权利要求1所述的方法,还包括:在所述操作S5中,将所述DyHandler对象从所述mMap对象中删除,包括:通过调用mMap对象中的mMap.removecls方法来将所述DyHandler对象进行释放。6.一种Android电子设备,包括:处理器;存储器,其存储有计算机可执行程序,该程序在被所述处理器执行时,使得所述处理器执行:S1,定义DyHandler类,该DyHandler类的对象具有异步通信功能;S2,定义生产DyHandler对象的getDyHandlerClasscls函数,其中,cls为产生DyHandler对象的调用参数;S3,定义Map集合,其中,所述Map集合的mMap对象用于表示所述调用参数cls与根据该调用参数cls所产生的DyHandler对象的映射关系;S4,在根据调用参数cls产生DyHandler对象时,判定调用参数cls是否存在于所述Map集合的mMap对象中,如果是,则调用getDyHandlerClasscls函数得到DyHandler对象,否则,调用DyHandler类的构造函数来获得DyHandler对象;S5,当不再使用所述DyHandler对象时,将所述DyHandler对象从所述mMap对象中删除。7.根据权利要求6所述的电子设备,其中,该DyHandler类中包括用于进行消息传输的协议栈和消息传输的对象mListener,处理器将所述对象mListener赋值为入参参数listener,构建所述对象mListener与调用函数消息接受的引用关系,再通过协议栈将消息传输给调用函数的对象。8.根据权利要求6所述的电子设备,还包括:该getDyHandlerClasscls函数为所述DyHandler类中的静态函数。9.根据权利要求6所述的电子设备,还包括:所述处理器调用getDyHandlerClasscls函数得到DyHandler对象时,判断所述调用参数cls是否为空,如果是则返回,否则获取该DyHandler对象。10.根据权利要求6所述的电子设备,还包括:在处理器将所述DyHandler对象从所述mMap对象中删除,包括:通过调用mMap对象中的mMap.removecls方法来将所述DyHandler对象进行释放。

百度查询: 武汉斗鱼网络科技有限公司 Android中异步通信工具设计方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。