Android中异步通信工具设计方法与流程

文档序号:16672826发布日期:2019-01-18 23:42阅读:201来源:国知局
Android中异步通信工具设计方法与流程

本公开涉及通信技术领域,尤其涉及一种android中异步通信工具设计方法。



背景技术:

传统方案中异步通信使用的是android系统提供的一个handler工具类来进行通信的,由于该方案中存在handler的使用比较频繁,并且需要实例化对象及对消息回调的处理等问题,使得其使用起来非常繁琐,并且当对消息不能够及时释放的时候,就很容易产生内存泄漏的问题,从而导致内存被大量占用而不释放,导致其他业务无法申请到相应的内存空间,从而出现异常。



技术实现要素:

针对传统方案中现有的技术问题,本发明提供一种android系统中异步通信工具的设计方法及android电子设备,用于解决来传统方案中handler使用难度大导致的异步通信使用繁琐及handler中对消息释放不及时导致内存泄漏从而导致内存被大量占用致使其他业务无法申请到相应的内存空间的问题。

本公开提供了一种android系统中异步通信工具的设计方法,包括:定义dyhandler类;定义生产dyhandler对象的getdyhandler(classcls)函数,其中,cls为产生dyhandler对象的调用参数;定义map集合,其中,所述map集合的mmap对象用于表示所述调用参数cls与根据该调用参数cls所产生的dyhandler对象的映射关系;在根据调用参数cls产生dyhandler对象时,判定调用参数cls是否存在于所述map集合的mmap对象中,如果是,则调用getdyhandler(classcls)函数得到dyhandler对象,否则,调用dyhandler类的构造函数来获得dyhandler对象;当不再使用所述dyhandler对象时,将所述dyhandler对象从所述mmap对象中删除。

可选地,该dyhandler类中包括用于进行消息传输的协议栈和消息传输的对象mlistener,将所述对象mlistener赋值为入参参数listener,构建所述对象mlistener与调用函数消息接受的引用关系,再通过协议栈将消息传输给调用函数的对象。

可选地,该getdyhandler(classcls)函数为所述dyhandler类中的静态函数。

可选地,在调用getdyhandler(classcls)函数得到dyhandler对象时,判断所述调用参数cls是否为空,如果是则返回,否则获取该dyhandler对象。

可选地,将所述dyhandler对象从所述mmap对象中删除,包括:通过调用mmap对象中的mmap.remove(cls)方法来将所述dyhandler对象进行释放。

本公开的另一个方面提供了一种android电子设备,包括:处理器和存储器,存储器存储有计算机可执行程序,该程序在被所述处理器执行时,使得所述处理器执行:定义dyhandler类;定义生产dyhandler对象的getdyhandler(classcls)函数,其中,cls为产生dyhandler对象的调用参数;定义map集合,其中,所述map集合的mmap对象用于表示所述调用参数cls与根据该调用参数cls所产生的dyhandler对象的映射关系;在根据调用参数cls产生dyhandler对象时,判定调用参数cls是否存在于所述map集合的mmap对象中,如果是,则调用getdyhandler(classcls)函数得到dyhandler对象,否则,调用dyhandler类的构造函数来获得dyhandler对象;当不再使用所述dyhandler对象时,将所述dyhandler对象从所述mmap对象中删除。

可选地,处理器将所述对象mlistener赋值为入参参数listener,构建所述对象mlistener与调用函数消息接受的引用关系,再通过协议栈将消息传输给调用函数的对象。

可选地,该getdyhandler(classcls)函数为所述dyhandler类中的静态函数。

可选地,处理器调用getdyhandler(classcls)函数得到dyhandler对象时,判断所述调用参数cls是否为空,如果是则返回,否则获取该dyhandler对象。

可选地,在处理器将所述dyhandler对象从所述mmap对象中删除,包括:通过调用mmap对象中的mmap.remove(cls)方法来将所述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对象的getdyhandler(classcls)函数,其中,cls为产生dyhandler对象的调用参数;定义map集合,其中,map集合的mmap对象用于表示调用参数cls与根据该调用参数cls所产生的dyhandler类的映射关系;在根据调用参数cls产生dyhandler对象时,判定调用参数cls是否存在于map集合的mmap对象中,如果是,则调用getdyhandler(classcls)函数得到dyhandler对象,否则,调用dyhandler类的构造函数来获得dyhandler对象;当不再使用dyhandler对象时,将dyhandler对象从mmap对象中删除,。

图1示意性示出了根据本公开实施例提供的android系统中异步通信工具的设计方法的流程图。

如图1所示,具体方法包括如下操作:

s1,定义dyhandler类,该dyhandler类的对象具有异步通信功能。

在上述操作s1中,具体采用publicclassdyhandler<t>extendshandler的方法定义dyhandler类,使得该dyhandler类继承了android系统提供的handler类,其中,在定义dyhandler类时,采用泛型技术为dyhandler提供一个泛型参数t,这种在定义时给定泛型参数t的方式便于后续的实现过程中对t进行相应的约束和操作。

另外,在dyhandler类中定义了一个消息透传的协议栈messagelistener,用于后期对系统handler相关消息进行透传而设计,该协议栈与系统handler消息透传的协议栈是一致的,具体设计方法为:

publicinterfacemessagelistener{

voidmagichandlemessage(messagemsg)

}

其中,该协议栈messagelistener包含唯一一个协议方法magichandlemessage,该协议方法magichandlemessage包含一个message类型的参数,且返回值是void,即透传协议的设计需要保证这样几个特点:其一是返回值是void,其二是入参参数一定是message类型的参数,这样协议方法在入参和返回结果上保持一致的,才能保证后续的消息透传设计。

同时,在dyhandler类中还定义了一个透传协议的对象mlistener,即消息传输的对象,具体定义方法是dyhandler.messagelistenermlistener,然后采用方法setonmessagelistener函数将对象mlistener赋值为入参参数对象listener。具体定义如下:

publicvoidsetonmessagelistener(dyhandler.messagelistenerlistener){

this.mlistener=listener;

}

通过这种方式实现对象mlistener与调用函数的消息接受的引用关系,最终通过协议栈messagelistener将消息透传到调用函数的对象中去。

s2,定义生产dyhandler对象的getdyhandler(classcls)函数,其中,cls为产生dyhandler对象的调用参数。

在上述s2操作中,构建函数publicclassdyhandlergetdyhandler(classcls){}生产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集合的方法为map<classdyhandler>mmap,该集合包含class和dyhandler类型的两个泛型参数,这种设计主要用于构建调用参数cls与根据该调用参数cls所产生的dyhandler类的映射关系,避免多次实例化多个对象。

另外,在定义好mmap需要对mmap对象进行实例化操作,具体方实例化方法是通过调用hashmap的构造函数map<classdyhandler>mmap=newhashmap<class,dyhandler>();来对其进行实例化处理。

s4,在根据调用参数cls产生dyhandler对象时,判定调用参数cls是否存在于所述map集合的mmap对象中,如果是,则调用getdyhandler(classcls)函数得到dyhandler对象,否则,调用dyhandler类的构造函数来获得dyhandler对象。

在上述操作s4中,需要判定mmap对象中是否已经实例化过class对应的dyhandler对象,即调用参数cls是否存在于mmap对象中。首先判断cls是否为空,若为null则返回,否则采用mmap.contains(cls)方法判断cls是否存在于mmap对象中,如果该函数返回值为true,表示已经实例化dyhandler对象,此时直接通过调用mmap.get(cls)方法来取出实例化过的对象mdyhandler,然后returnmdyhandler将实例化过的对象mdyhandler返回,如果该函数返回值为false,表示曾经没有实例化过class对应的dyhandler对象,此时需要调用dyhandler构造函数对dyhandler对象进行实例化操作,具体是通过调用dyhandlermdyhandler=newdyhandler(),然后通过调用mmap.put(cls,mdyhandler)构建实例化过的对象mdyhandler与参数cls的映射关系并存储到mmap对象中,在通过returnmdyhandler将实例化过的对象mdyhandler返回。

s5,当不再使用所述dyhandler对象时,将所述dyhandler对象从所述mmap对象中删除。

在上述操作s5中,通过调用mmap对象中的mmap.remove(cls)方法来将所述dyhandler对象进行释放,避免mmap对象持有cls对象的dyhandler对象,断开了dyhandler对象与mmap对象的引用关系,这样系统的垃圾回收机制就能够在恰当的时间对其进行回收处理,从而避免内存泄漏的问题,保证系统内存能够被正常释放,避免系统出现内存不足的问题,其他业务就能申请到相应的内存空间。

综上所述,本公开提供了一种android中异步通信工具的设计方法及android电子设备,方法包括:定义dyhandler类;定义生产dyhandler对象的getdyhandler(classcls)函数,其中,cls为产生dyhandler对象的调用参数;定义map集合,其中,所述map集合的mmap对象用于表示所述调用参数cls与根据该调用参数cls所产生的dyhandler对象的映射关系;在根据调用参数cls产生dyhandler对象时,判定调用参数cls是否存在于所述map集合的mmap对象中,如果是,则调用getdyhandler(classcls)函数得到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页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1