CN103902388B - 应用之间进行通信的方法和电子设备 - Google Patents
应用之间进行通信的方法和电子设备 Download PDFInfo
- Publication number
- CN103902388B CN103902388B CN201210587240.7A CN201210587240A CN103902388B CN 103902388 B CN103902388 B CN 103902388B CN 201210587240 A CN201210587240 A CN 201210587240A CN 103902388 B CN103902388 B CN 103902388B
- Authority
- CN
- China
- Prior art keywords
- module
- callback
- callback object
- person
- administrative unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种应用之间进行通信的方法和电子设备。该方法包括:在系统模块启动时启动设置于系统模块之中的回调对象管理单元;回调对象管理单元分别与回调者模块和注册回调者模块建立关联关系;回调对象管理单元接收回调者模块发送过来的通知对象,并根据与注册回调者模块建立的关联关系,查找通知对象所指向的注册回调者模块;如果查找得到存在通知对象所指向的注册回调者模块,回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理。通过上述方式,本发明能够提高回调对象注册的稳定性,进而提高回调对象使用的可靠性。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种应用之间进行通信的方法和电子设备。
背景技术
在整个软件平台中,包括系统模块和用户模块。其中,系统模块作为软件平台的核心,支撑软件平台的正常运行,为不可或缺的模块。而用户模块并不是软件平台不可或缺的模块,其运行于软件平台之上,即使缺少用户模块也并不会影响到软件平台的正常运行,仅是该用户模块相应的功能缺失而已。
在整个软件平台运行过程中,为了降低耦合度,绝大多数用户模块都被设计成相互独立的,但是各用户模块之间,或至少某几个用户模块之间具有联系。具体而言,有的用户模块需要知道另外某个或某几个用户模块某些状态的改变、事件发生等情况,进而在其自身内部做相应的处理,例如界面更新、数据处理等工作。
通常,具有联系的用户模块之间通过消息、广播或者回调等几种方式作为其联系的纽带。其中,尤其以回调方式使用较多。
参阅图1,系统模块10启动后各用户模块跟随系统模块10相继启动,其中一个用户模块作为回调者模块20其内部创建一个回调对象管理单元200,该回调对象管理单元200在其内部创建一个存储子单元并负责对其进行维护。
其它用户模块作为注册回调者模块21将自己的接口函数地址注册到回调者模块20,回调者模块20将此回调对象加入到存储子单元。当回调者模块20有状态改变、事件发生等情况时,回调对象管理单元200就遍历整个存储子单元,找到其中对此情况感兴趣的回调对象,并调用该回调对象对应的接口函数,这样注册回调者模块21的相应处理在接口函数中即被执行。
其中,回调对象管理单元200属于回调者模块20的一部分,其运行于回调者模块20中,并且其生命周期与回调者模块20的生命周期保持一致,即其随回调者模块20的启动而启动、随回调者模块20的终止而终止。
这样的设计具有较好的优点:回调者模块20是非系统模块10,它并不影响系统模块10的平稳运行,在加上各用户模块之间,即回调者模块20和注册回调者模块21之间为独立性的设计,单个模块的出错、死掉或退出仅仅会影响其自身的正常运行,并不会其它模块的正常运行造成影响。
然而,这样的设计具有严重的缺陷:
因为在某些情况下,回调者模块20可能会出错、死掉或退出,该回调者模块20需要在其自身或系统模块10的干预下重新启动。回调者模块20就不能保证注册回调者模块21所注册的回调对象的稳定保存和持有。如果回调者模块20因某些情况运行出错,进行了重启,那么回调者模块20就会释放掉它所有的内存数据,其内部的回调对象管理单元200就会重新创建存储子单元,该存储子单元中没有回调对象,而此前已经注册过回调的模块对此情况并不知晓。对于这种情况,此前注册过的注册回调者模块21的接口函数永远也不会被调用到。
发明内容
本发明主要解决的技术问题是提供一种应用之间进行通信的方法和电子设备,能够借助系统模块的稳定性提高回调对象注册的稳定性,进而提高回调对象使用的可靠性。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种应用之间进行通信的方法,包括如下步骤:在系统模块启动时启动设置于系统模块之中的回调对象管理单元;回调对象管理单元分别与回调者模块和注册回调者模块建立关联关系;回调对象管理单元接收回调者模块发送过来的通知对象,并根据与注册回调者模块建立的关联关系,查找通知对象所指向的注册回调者模块;如果查找得到存在通知对象所指向的注册回调者模块,回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理。
其中,在系统模块启动时启动设置于系统模块之中的回调对象管理单元的步骤之后,包括:系统模块根据回调对象管理单元生成回调对象管理单元对象实例,回调对象管理单元对象实例创建回调对象链表,并初始化回调对象管理单元对象实例,其后,系统模块将回调对象管理单元对象实例添加到系统服务链表;回调者模块创建通知对象,自系统服务链表中获取回调对象管理单元对象实例,并将通知对象发送至回调对象链表,以建立与回调对象管理单元的关联关系;注册回调者模块创建回调对象,自系统服务链表中获取回调对象管理单元对象实例,将回调对象注册到回调对象链表,以建立与回调对象管理单元的关联关系。
其中,注册回调者模块配置注册条件,注册回调者模块根据注册条件自系统服务链表中获取回调对象管理单元对象实例,并将其创建的回调对象注册到回调对象链表。
其中,在将其创建的回调对象注册到回调对象链表的步骤中,包括:设置同步锁;将回调对象添加到回调对象链表的末端;清除同步锁。
其中,在设置同步锁的步骤之后,包括:遍历回调对象链表,如果回调对象链表中不存在回调对象,将回调对象添加到回调对象链表的末端,并执行清除同步锁的步骤;如果回调对象链表中存在回调对象,直接执行清除同步锁的步骤。
其中,在回调者模块创建通知对象的步骤之后、自系统服务链表中获取回调对象管理单元对象实例的步骤之前,包括:回调者模块配置通知条件,回调者模块根据通知条件自系统服务链表中获取回调对象管理单元对象实例。
其中,在回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理的步骤中,包括:设置同步锁;遍历回调对象链表,并依次执行通知对象所有相关联的回调对象中相应的函数或类实例;清除同步锁。
其中,在回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理的步骤之后,包括:注册回调者模块自系统服务链表中获取回调对象管理单元对象实例,并对其创建的回调对象进行反注册。
其中,在自系统服务链表中获取回调对象管理单元对象实例的步骤之前,包括:判断回调对象链表中是否存在回调对象;如果存在,则执行自系统服务链表中获取回调对象管理单元对象实例的步骤;在对其创建的回调对象进行反注册的步骤中,包括:设置同步锁;遍历回调对象链表,将回调对象自回调对象链表中删除;清除同步锁。
为解决上述技术问题,本发明采用的另一个技术方案是:提供一种应用之间进行通信的电子设备,包括:系统模块、设置于系统模块之中的回调对象管理单元以及至少两个用户模块,其中,至少一个用户模块作为回调者模块,其余用户模块作为注册回调者模块;其中,回调对象管理单元在系统模块启动时启动,并且,回调对象管理单元分别与回调者模块和注册回调者模块建立关联关系;回调对象管理单元接收回调者模块发送过来的通知对象,并根据与注册回调者模块建立的关联关系,查找通知对象所指向的注册回调者模块;如果查找得到存在通知对象所指向的注册回调者模块,回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理。
其中,电子设备是计算机、手机、平板电脑、PDA或者MP4。
本发明的有益效果是:区别于现有技术的情况,本发明应用之间进行通信的方法,通过将回调对象管理单元架构于系统模块内部的方式,使得回调对象管理单元的生命周期与系统模块的生命周期保持一致,因为系统模块相较于非系统模块之外的用户模块而言,其设计必然更加稳定,故系统模块出错、死掉或退出的机率将大幅度较小,此时,由于回调对象管理单元仅仅依赖于该系统模块,故回调对象管理单元出错、死掉或退出的机率也能够相应减小,所以回调对象管理单元能够借助系统模块的稳定性的提高保证回调对象注册的稳定性,进而提高回调对象使用的可靠性。
附图说明
图1是现有技术应用之间进行通信的方法实施方式的框架示意图;
图2是本发明应用之间进行通信的方法第一实施方式的流程图;
图3是本发明应用之间进行通信的方法第二实施方式的流程图;
图4是本发明应用之间进行通信的方法第二实施方式中回调对象的注册方法的流程图;
图5是将回调对象注册到回调对象管理单元的流程图;
图6是本发明应用之间进行通信的方法第二实施方式中发送通知对象的流程图;
图7是本发明应用之间进行通信的方法第二实施方式中发送通知对象的另一流程图;
图8是本发明应用之间进行通信的方法第三实施方式的流程图;
图9是图8所示实施方式中进行反注册的流程图;
图10是图9所示流程图中进行反注册的步骤的流程图;
图11是本发明应用之间进行通信的电子设备实施方式的结构框图。
具体实施方式
下面结合附图和实施方式对本发明进行详细说明。
参阅图2,图2是本发明应用之间进行通信的方法第一实施方式的流程图。本发明实施方式包括如下步骤:
步骤S101,在系统模块启动时启动设置于系统模块之中的回调对象管理单元。
其中,在设计系统模块时,预先在系统模块内设计一个回调对象管理单元。该回调对象管理单元随系统模块的启动而启动,随系统模块的终止而终止,即该回调对象管理单元的生命周期与系统模块的生命周期保持一致。
步骤S102,回调对象管理单元分别与回调者模块和注册回调者模块建立关联关系。
简要而言,回调者模块通过通知对象与回调对象管理单元建立关联关系,注册回调者模块通过回调对象与回调对象管理单元建立关联关系。并且,回调者模块和注册回调者模块均通过进程间通信(IPC,Inter-Process Communication)与回调对象管理单元建立关联关系。
步骤S103,回调对象管理单元接收回调者模块发送过来的通知对象,并根据与注册回调者模块建立的关联关系,查找通知对象所指向的注册回调者模块。
全文中,“指向”的含义为通过回调对象管理单元遍历整个回调对象链表,找出所有需要通知对象中标识的事件类型的回调对象。因此这是一个匹配的过程,包括一对一的关系和一对多的关系,即一个通知对象可以与零个或者一个或者多个回调对象建立关联。
其中,通知对象被定义成回调者模块、回调对象管理单元共同认可、识别的形式,也就是通知对象里的变量、函数是被上述两者的理解是一致的。并且,回调对象管理单元接收通知对象是被动的,它不会主动获取该通知对象,而是回调者模块发送过来即接收。
步骤S104,如果查找得到存在通知对象所指向的注册回调者模块,回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理。
其中,回调对象也被定义成注册回调者模块、回调对象管理单元共同认可、识别的形式,也就是回调对象里的变量、函数是被上述两者的理解是一致的。
本发明实施方式,通过将回调对象管理单元架构于系统模块内部的方式,使得回调对象管理单元的生命周期与系统模块的生命周期保持一致,因为系统模块相较于非系统模块之外的用户模块而言,其设计必然更加稳定,故系统模块出错、死掉或退出的机率将大幅度较小,此时,由于回调对象管理单元仅仅依赖于该系统模块,故回调对象管理单元出错、死掉或退出的机率也能够相应减小,所以回调对象管理单元能够借助系统模块的稳定性的提高保证回调对象注册的稳定性,进而提高回调对象使用的可靠性。
参阅图3,图3是本发明应用之间进行通信的方法第二实施方式的流程图。本发明实施方式包括如下步骤:
步骤S201,在系统模块启动时启动设置于系统模块之中的回调对象管理单元。
步骤S202,系统模块根据回调对象管理单元生成回调对象管理单元对象实例,回调对象管理单元对象实例创建回调对象链表,并初始化回调对象管理单元对象实例,其后,系统模块将回调对象管理单元对象实例添加到系统服务链表。
其中,回调对象链表生命周期与回调对象管理单元保持一致,进而与系统模块的生命周期保持一致。
初始化回调对象管理单元对象实例,以使其处于正常工作状态。
步骤S203,回调者模块创建通知对象,自系统服务链表中获取回调对象管理单元对象实例,并将通知对象发送至回调对象链表,以建立与回调对象管理单元的关联关系。
步骤S204,注册回调者模块创建回调对象,自系统服务链表中获取回调对象管理单元对象实例,将回调对象注册到回调对象链表,以建立与回调对象管理单元的关联关系。
该回调对象管理单元负责维护回调对象链表,包括创建、销毁该回调对象链表,以及用于后续步骤中向该回调对象链表中添加回调对象、自回调对象链表中删除回调对象、在回调对象链表中查找回调对象、利用系统模块的API(Application ProgrammingInterface,应用程序编程接口)接口为其它用户模块提供接口以访问其内部的数据。
步骤S205,回调对象管理单元接收回调者模块发送过来的通知对象,并根据与注册回调者模块建立的关联关系,查找通知对象所指向的注册回调者模块。
步骤S206,如果查找得到存在通知对象所指向的注册回调者模块,回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理。
本发明实施方式,将回调对象管理单元对象实例加入到系统服务链表,通过系统模块提供的API接口,可方便外部用户模块(包括回调者模块和注册回调者模块)访问和使用。
参阅图4,图4是本发明应用之间进行通信的方法第二实施方式中回调对象的注册方法的流程图。本发明实施方式包括如下步骤:
步骤S300,接收注册请求。
其中,注册回调者模块发出注册请求并由回调对象管理单元接收。
步骤S301,创建回调对象。
其中,由注册回调者模块创建该回调对象。
步骤S302,配置注册条件。
其中,注册条件由注册回调者模块进行配置。进一步地,注册条件可以理解为注册回调者模块需要向回调对象管理单元反馈的事件类型的集合。举例而言,如该事件类型的集合只包括亮度事件类型或音量事件类型,如果注册回调者模块创建的回调对象属于该事件类型的集合中所定义的亮度事件类型或音量事件类型时,在后续步骤中可以将该回调对象注册到回调对象管理单元中,而如果注册回调者模块创建的回调对象并不属于该事件类型的集合中所定义的亮度事件类型或音量事件类型时,就不需要将该回调对象注册到回调对象管理单元中。
即,步骤S302中,配置注册回调者模块中包括的哪些事件需要向回调对象管理单元进行注册。举例而言,可设置反馈事件标识,就是将来有这些标识的事件发生了就要通知自己。
其中,增设配置注册条件的步骤可以避免用户不关心的回调对象的注册,而使得用户关心的回调对象才能被注册,具体地,增设配置注册条件,即步骤S302中,注册条件由注册回调者模块配置,综合上述描述,配置注册条件可进一步地解释为,增加配置需要反馈事件标识,可以使得将来有事件发生时,回调对象管理单元能够明确的找到事件要传递给的回调对象,而不至于错发给不需要的回调对象,能够提高效率。
步骤S303,获取回调对象管理单元对象实例。
其中,注册回调者模块自系统服务链表中获取回调对象管理单元对象实例。
步骤S304,判断回调对象管理单元对象实例是否获取成功。
在步骤S304中,如果获取成功,进入步骤S305;否则,进入步骤S309。
步骤S305,将回调对象注册到回调对象管理单元。
步骤S306,判断注册是否成功。
在步骤S306中,如果注册成功,进入步骤S307;否则,进入步骤S309。
步骤S307,记录此回调对象。
步骤S308,设置注册成功标识。
步骤S309,设置注册失败标识。
结合图5,图5是将回调对象注册到回调对象管理单元的流程图。具体地,步骤S305中,包括如下子步骤:
步骤S3051,设置同步锁。
步骤S3052,获取回调对象链表长度,并初始化当前位置为0。
步骤S3053,判断当前位置是否小于回调对象链表长度。
在步骤S3053中,如果当前位置小于回调对象链表长度,则进入步骤S3054;否则,进入步骤S3056。
步骤S3054,获取当前位置所指向的回调对象。
步骤S3055,判断当前位置所指向的回调对象与要注册的回调对象是否是同一个。
在步骤S3055中,如果当前位置所指向的回调对象与要注册的回调对象是同一个,进入步骤S3056;否则,进入步骤S3058。
步骤S3056,将回调对象添加到回调对象链表的末端。此处,即可将需要注册的回调对象注册到回调对象链表中。
举例而言,在步骤S3056中,注册回调者模块可以通过调用系统模块的registered()函数将其自身的回调对象添加到回调对象链表中,即注册到回调对象管理单元中。
步骤S3057,清除同步锁,并结束相应处理流程。
步骤S3058,当前位置加1。
其中,步骤S3052-S3055以及步骤S3058,即表示通过遍历回调对象链表的方式,判断回调对象链表中是否已经存在需要注册的回调对象,如果回调对象链表中不存在回调对象,将回调对象添加到回调对象链表的末端;如果回调对象链表中已经存在回调对象,则直接执行清除同步锁的步骤,即不需要重复注册同一回调对象。图5所示遍历回调对象链表是自表头至表尾,当然在其它实施方式中也可以以自表尾至表头的顺序进行遍历,此处不做过多限制。
本发明实施方式,通过判断整个回调对象链表中是否已经存在需要注册的回调对象,可以节约空间资源,提高后续步骤中遍历回调者模块需要使用到的回调对象的查找效率,并减少因为重复处理同一回调对象而导致的出错概率。
参阅图6,图6是本发明应用之间进行通信的方法第二实施方式中发送通知对象的流程图。本发明实施方式包括如下步骤:
步骤S400,回调者模块发出通知请求并由回调对象管理单元接收。
步骤S401,创建通知对象。其中,由回调者模块创建该通知对象。
步骤S402,配置通知条件。
其中,步骤S402中,该通知条件由回调者模块进行配置。进一步地,配置通知条件可理解为配置事件通知类型及数据。即通知对象需要设置事件通知类型,标识是什么事件(或消息),并带有相应的数据、参数。回调对象管理单元要根据事件通知类型,遍历发送到有这些标识的回调对象,并同时把数据、参数也给传进去。值得注意的是,注册条件与通知条件所涉及的事件类型可以相同,或者虽然不同但回调对象管理单元可以通过一定规则转换之后成为相同的,最终用以建立相互之间的内在联系,此处不作过多描述。
步骤S403,获取回调对象管理单元对象实例。
其中,自系统服务链表获取该回调对象管理单元对象实例。
步骤S404,判断回调对象管理单元对象实例是否获取成功。
在步骤S404中,如果回调对象管理单元对象实例获取成功,进入步骤S405;否则,进入步骤S407。
步骤S405,向回调对象管理单元发出通知。
步骤S406,设置通知成功标识。
步骤S407,设置通知失败标识。
结合图7,图7是本发明应用之间进行通信的方法第二实施方式中发送通知对象的另一流程图。步骤S405中,包括如下子步骤:
S4051,设置同步锁。
S4052,获取回调对象链表长度,并初始化当前位置为0。
S4053,判断当前位置是否小于回调对象链表长度。
在步骤S4053中,如果当前位置小于回调对象链表长度,进入步骤S4054;否则,进入步骤S4058。
S4054,取出当前位置回调对象。
S4055,判断当前位置所指向的回调对象是否是满足通知条件。
在步骤S4055中,如果当前位置所指向的回调对象满足通知条件。进入步骤S4056;否则,进入步骤S4057。
S4056,执行回调对象中相应的函数或者类实例。
举例而言,在步骤S4056中,回调者模块通过调用系统模块的notify()函数,告知回调对象管理单元对象实例,告知它有事件或参数等需要反馈给需要这些事件或参数等的注册回调者模块。
S4057,当前位置加1。
S4058,清除同步锁,并结束相应处理流程。
其中,步骤S4052-S4057即表示通过遍历回调对象链表的方式,判断回调对象链表中是否存在满足通知条件的回调对象,如果回调对象链表中不存在回调对象,则直接执行清除同步锁的步骤;如果回调对象链表中存在回调对象,执行该回调对象中相应的函数或者类实例。图7所示遍历回调对象链表是自表头至表尾,当然在其它实施方式中也可以以自表尾至表头的顺序进行遍历,此处不做过多限制。
参阅图8,图8是本发明应用之间进行通信的方法第三实施方式的流程图。本发明实施方式与本发明第二实施方式的区别仅在于,在回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理的步骤之后,还包括如下步骤:
步骤S207,注册回调者模块自系统服务链表中获取回调对象管理单元对象实例,并对其创建的回调对象进行反注册。
具体地,可参阅图9,图9是图8所示实施方式中进行反注册的流程图。其中,包括如下步骤:
步骤S500,注册回调者模块发出反注册请求并由回调对象管理单元接收。
步骤S501,判断回调对象链表中是否存在已注册过的回调对象记录。
在步骤S501中,如果回调对象链表中存在已注册过的回调对象记录,进入步骤S502;否则,进入步骤S506。
步骤S502,自系统服务链表中获取回调对象管理单元对象实例。
步骤S503,判断回调对象管理单元对象实例是否获取成功。
在步骤S503中,如果回调对象管理单元对象实例获取成功,进入步骤S504;否则,进入步骤S507。
步骤S504,进行反注册。
步骤S505,清除回调对象记录。
步骤S506,设置反注册成功标识。
步骤S507,设置反注册失败标识。
结合图10,图10是图9所示流程图中进行反注册的步骤的流程图。其中,步骤S504包括如下子步骤:
步骤S5041,设置同步锁。
步骤S5042,获取回调对象链表长度,并初始化当前位置为0。
步骤S5043,判断当前位置是否小于回调对象链表长度。
在步骤S5043中,如果当前位置小于回调对象链表长度,进入步骤S5044;否则,进入步骤S5047。
步骤S5044,获取当前位置所指向的回调对象。
步骤S5045,判断当前位置所指向的回调对象与要删除的回调对象是否是同一个。
在步骤S5045中,如果当前位置所指向的回调对象与要删除的回调对象是同一个,进入步骤S5046;否则,进入步骤S5047。
步骤S5046,将回调对象自回调对象链表中删除。
举例而言,在步骤S5046中,注册回调者模块通过调用系统模块的unregister()函数将回调对象自回调对象链表中删除。
步骤S5047,清除同步锁,并结束相应处理流程。
步骤S5048,当前位置加1。
本发明实施方式,通过增加反注册处理步骤,在注册回调者模块不在需要任何消息反馈时,即将之前注册过的回调对象从回调对象链表中删除,可节约系统资源,即节约内存。
上述实施方式中,设置同步锁的意义在于系统模块在一个时间段内仅允许一个进程访问和使用回调对象管理单元等,能够防止在一个时间段内多个进程访问和使用回调对象管理单元引起的系统混乱。
上述实施方式中,回调对象是注册回调者模块内部所包括函数的函数地址或者包括多个函数地址的结构体地址,或者是注册回调者模块内部所包括类实例的类实例地址。值得注意的是,回调对象仅是一个统称,对于不同的编程语言,虽然回调对象表面指代的都为一个指针或地址,但其该指针或地址所对应的具体内容并不相同,比如前文所描述的,回调对象可以对应函数的函数地址、对应多个函数的函数地址的结构体地址或者对应类实例的类实例地址。
并且,上述实施方式中,回调对象管理单元则调用通知对象所指向的注册回调者模块对应的回调对象并进行相应处理的步骤中,相应处理可以具体指:由注册回调者模块执行回调对象所对应的一个函数、多个函数或者类实例。当然,在此步骤中,具体执行一个函数、多个函数或者类实例视该回调对象的具体所指情况而定。
本发明还提供一种应用之间进行通信的电子设备。
参阅图11,图11是本发明应用之间进行通信的电子设备实施方式的结构框图。本发明实施方式包括:系统模块100和至少两个用户模块。
其中,系统模块100内部架构有回调对象管理单元1001,并且,至少两个用户模块中,至少一个用户模块作为回调者模块200,其余的用户模块作为注册回调者模块210。以图2为例进行说明,图2中,用户模块数量为四,其中一个作为回调者模块200,另外三个作为注册回调者模块210。
其中,回调对象管理单元1001的生命周期与系统模块100的生命周期保持一致,回调对象管理单元1001在系统模块100启动时启动,回调对象管理1001单元分别与回调者模块200和注册回调者模块210建立关联关系。
回调对象管理单元1001接收回调者模块200发送过来的通知对象,并根据与注册回调者模块210建立的关联关系,查找通知对象所指向的注册回调者模块210;如果查找得到存在通知对象所指向的注册回调者模块210,回调对象管理单元1001则调用通知对象所指向的注册回调者模块200对应的回调对象并进行相应处理。
以下再从另一角度对本发明实施方式进行描述:
系统模块100启动时,系统模块100内部的回调对象管理单元1001启动,此时,回调对象管理单元1001创建一个回调对象链表。系统模块100启动的同时,各用户模块相继开始运行,注册回调者模块210向回调对象管理单元1001发送回调对象注册请求,回调对象管理单元1001接收该回调对象注册请求、并根据该回调对象注册请求将该回调对象注册请求所对应的回调对象注册到回调对象链表中。
如果回调者模块200需要调用注册回调者模块210中的回调对象,回调者模块200向回调对象管理单元1001发出通知对象,该通知对象包括回调者模块200需要反馈的事件类型、参数等信息,具体视需求,回调对象管理单元1001接收该信息、并根据而定。根据该通知对象的具体内容查找回调对象链表,如果查找回调对象链表时查找得到该通知对象相关联的回调对象,回调对象管理单元1001自回调对象链表中调用该通知对象相关联的回调对象并进行相应处理。
本发明实施方式,通过将回调对象管理单元1001架构于系统模块100内部的方式,使得回调对象管理单元1001的生命周期与系统模块100的生命周期保持一致,因为系统模块100相较于非系统模块100之外的用户模块而言,其设计必然更加稳定,故系统模块100出错、死掉或退出的机率将大幅度较小,此时,由于回调对象管理单元1001仅仅依赖于该系统模块100,故回调对象管理单元1001出错、死掉或退出的机率也能够相应减小,所以回调对象管理单元1001能够借助系统模块100的稳定性的提高保证回调对象注册的稳定性,进而提高回调对象使用的可靠性。
上述实施方式中,电子设备是计算机、手机、平板电脑、PDA(Personal DigitalAssistant,掌上电脑)或者MP4等。
综上,本发明实施方式的应用之间进行通信的方法和电子设备,具有如下优点:
(1)能够使用户模块的功能得以保持;
(2)借助于系统模块的稳定性,可以减少用户模块稳定性参差不齐产生的负面影响,注册回调者模块成功注册回调对象后,回调对象就能稳定保持,不容易丢失,而且不论回调者模块的稳定性是否可靠,对于注册回调者模块来说都是没有影响的;
(3)在开发过程中,注册回调者模块不再受到不稳定回调者模块的影响而产生大量无效的BUG,并且,在使用过程中,即便是回调者模块重启了,用户的使用体验都是不会有太大的影响。
以上仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (11)
1.一种应用之间进行通信的方法,其特征在于,包括如下步骤:
在系统模块启动时启动设置于所述系统模块之中的回调对象管理单元;
所述回调对象管理单元分别与回调者模块和注册回调者模块建立关联关系;
所述回调对象管理单元接收所述回调者模块发送过来的通知对象,并根据与所述注册回调者模块建立的关联关系,查找所述通知对象所指向的注册回调者模块;
如果查找得到存在所述通知对象所指向的注册回调者模块,所述回调对象管理单元则调用所述通知对象所指向的注册回调者模块对应的回调对象并进行相应处理。
2.根据权利要求1所述的应用之间进行通信的方法,其特征在于,
所述在系统模块启动时启动设置于所述系统模块之中的回调对象管理单元的步骤之后,包括:
所述系统模块根据所述回调对象管理单元生成回调对象管理单元对象实例,所述回调对象管理单元对象实例创建回调对象链表,并初始化所述回调对象管理单元对象实例,其后,所述系统模块将所述回调对象管理单元对象实例添加到系统服务链表;
所述回调者模块创建通知对象,自所述系统服务链表中获取回调对象管理单元对象实例,并将所述通知对象发送至所述回调对象链表,以建立与所述回调对象管理单元的关联关系;
所述注册回调者模块创建回调对象,自所述系统服务链表中获取回调对象管理单元对象实例,将所述回调对象注册到所述回调对象链表,以建立与所述回调对象管理单元的关联关系。
3.根据权利要求2所述的应用之间进行通信的方法,其特征在于,
所述注册回调者模块配置注册条件,所述注册回调者模块自所述系统服务链表中获取回调对象管理单元对象实例,并将其创建的回调对象注册到所述回调对象链表。
4.根据权利要求3所述的应用之间进行通信的方法,其特征在于,
在所述将其创建的回调对象注册到所述回调对象链表的步骤中,包括:
设置同步锁;
将所述回调对象添加到所述回调对象链表的末端;
清除所述同步锁。
5.根据权利要求4所述的应用之间进行通信的方法,其特征在于,
在所述设置同步锁的步骤之后,包括:
遍历所述回调对象链表,如果所述回调对象链表中不存在所述回调对象,将所述回调对象添加到所述回调对象链表的末端,并执行清除所述同步锁的步骤;如果所述回调对象链表中存在所述回调对象,直接执行清除所述同步锁的步骤。
6.根据权利要求5所述的应用之间进行通信的方法,其特征在于,
在所述回调者模块创建通知对象的步骤之后、自所述系统服务链表中获取回调对象管理单元对象实例的步骤之前,包括:
所述回调者模块配置通知条件,所述回调者模块根据所述通知条件自所述系统服务链表中获取回调对象管理单元对象实例。
7.根据权利要求6所述的应用之间进行通信的方法,其特征在于,
在所述回调对象管理单元则调用所述通知对象所指向的注册回调者模块对应的回调对象并进行相应处理的步骤中,包括:
设置同步锁;
遍历所述回调对象链表,并依次执行所述通知对象所有相关联的回调对象中相应的函数或类实例;
清除所述同步锁。
8.根据权利要求2所述的应用之间进行通信的方法,其特征在于,
在所述回调对象管理单元则调用所述通知对象所指向的注册回调者模块对应的回调对象并进行相应处理的步骤之后,包括:
所述注册回调者模块自所述系统服务链表中获取回调对象管理单元对象实例,并对其创建的所述回调对象进行反注册。
9.根据权利要求8所述的应用之间进行通信的方法,其特征在于,
在所述自所述系统服务链表中获取回调对象管理单元对象实例的步骤之前,包括:
判断所述回调对象链表中是否存在所述回调对象;
如果存在,则执行自所述系统服务链表中获取回调对象管理单元对象实例的步骤;
在所述对其创建的所述回调对象进行反注册的步骤中,包括:
设置同步锁;
遍历所述回调对象链表,将所述回调对象自所述回调对象链表中删除;
清除所述同步锁。
10.一种应用之间进行通信的电子设备,其特征在于,包括:
系统模块、设置于所述系统模块之中的回调对象管理单元以及至少两个用户模块,其中,至少一个所述用户模块作为回调者模块,其余所述用户模块作为注册回调者模块;
其中,所述回调对象管理单元在所述系统模块启动时启动,并且,所述回调对象管理单元分别与所述回调者模块和所述注册回调者模块建立关联关系;所述回调对象管理单元接收所述回调者模块发送过来的通知对象,并根据与所述注册回调者模块建立的关联关系,查找所述通知对象所指向的注册回调者模块;如果查找得到存在所述通知对象所指向的注册回调者模块,所述回调对象管理单元则调用所述通知对象所指向的注册回调者模块对应的回调对象并进行相应处理。
11.根据权利要求10所述的电子设备,其特征在于,
所述电子设备是计算机、手机、平板电脑、PDA或者MP4。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210587240.7A CN103902388B (zh) | 2012-12-28 | 2012-12-28 | 应用之间进行通信的方法和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210587240.7A CN103902388B (zh) | 2012-12-28 | 2012-12-28 | 应用之间进行通信的方法和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902388A CN103902388A (zh) | 2014-07-02 |
CN103902388B true CN103902388B (zh) | 2017-10-03 |
Family
ID=50993726
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210587240.7A Active CN103902388B (zh) | 2012-12-28 | 2012-12-28 | 应用之间进行通信的方法和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103902388B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577540A (zh) * | 2017-08-31 | 2018-01-12 | 武汉斗鱼网络科技有限公司 | 视频交友中实现举报功能的方法、存储介质、设备及系统 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106130748B (zh) * | 2016-08-30 | 2019-05-10 | 山东鲁能智能技术有限公司 | 基于网络的多机多网分布式服务模块状态检测方法及系统 |
CN109412840A (zh) * | 2018-10-08 | 2019-03-01 | 郑州云海信息技术有限公司 | 一种数据获取方法及sdn控制器 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101073061A (zh) * | 2004-12-08 | 2007-11-14 | 皇家飞利浦电子股份有限公司 | 用于支持访问活动对象的方法和系统 |
CN101655806A (zh) * | 2009-09-25 | 2010-02-24 | 马丰文 | 一种软件系统内部组件数据交互方法 |
CN101720036A (zh) * | 2009-12-15 | 2010-06-02 | 青岛海信宽带多媒体技术有限公司 | 一种实现dvb数据多用户分发的系统 |
CN102654840A (zh) * | 2011-11-30 | 2012-09-05 | 天津书生投资有限公司 | 一种函数回调的方法和系统 |
-
2012
- 2012-12-28 CN CN201210587240.7A patent/CN103902388B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101073061A (zh) * | 2004-12-08 | 2007-11-14 | 皇家飞利浦电子股份有限公司 | 用于支持访问活动对象的方法和系统 |
CN101655806A (zh) * | 2009-09-25 | 2010-02-24 | 马丰文 | 一种软件系统内部组件数据交互方法 |
CN101720036A (zh) * | 2009-12-15 | 2010-06-02 | 青岛海信宽带多媒体技术有限公司 | 一种实现dvb数据多用户分发的系统 |
CN102654840A (zh) * | 2011-11-30 | 2012-09-05 | 天津书生投资有限公司 | 一种函数回调的方法和系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577540A (zh) * | 2017-08-31 | 2018-01-12 | 武汉斗鱼网络科技有限公司 | 视频交友中实现举报功能的方法、存储介质、设备及系统 |
CN107577540B (zh) * | 2017-08-31 | 2020-03-17 | 武汉斗鱼网络科技有限公司 | 视频交友中实现举报功能的方法、存储介质、设备及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103902388A (zh) | 2014-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9477787B2 (en) | Method and apparatus for information clustering based on predictive social graphs | |
US20210211522A1 (en) | Mini app processing method, server, device and storage medium | |
EP2898655B1 (en) | System and method for small batching processing of usage requests | |
CN106600499B (zh) | 一种基于总线形式的医院信息集成方法 | |
CN102769709B (zh) | 一种用于向用户提供服务联系信息的方法与装置 | |
EP2618278B1 (en) | Synchronizing endpoint data stores having disparate schemas | |
CN107181821A (zh) | 一种基于sse规范的消息推送方法及装置 | |
CN113162848B (zh) | 一种区块链网关的实现方法、装置、网关和介质 | |
CN103902388B (zh) | 应用之间进行通信的方法和电子设备 | |
US11294740B2 (en) | Event to serverless function workflow instance mapping mechanism | |
CN104166738A (zh) | 数据库查询处理的方法及装置 | |
CN110191204A (zh) | 一种内网设备间通信方法、系统、装置及计算机存储介质 | |
CN102457578A (zh) | 一种基于事件机制的分布式网络监控方法 | |
CN109542928A (zh) | 错误管理方法、装置、存储介质及终端设备 | |
EP3422186A1 (en) | Method, device and system for preventing memory data loss | |
CN104391876A (zh) | 一种静态数据存储及查询方法及系统 | |
CN112650804B (zh) | 大数据接入方法、装置、系统及存储介质 | |
CN110908644B (zh) | 状态节点的配置方法、装置、计算机设备和存储介质 | |
CN117195809A (zh) | 一种丝印导入方法、装置、设备及存储介质 | |
CN116861198A (zh) | 数据处理方法、装置及存储介质 | |
CN113282850B (zh) | 资源标签管理方法、装置、电子设备、系统及存储介质 | |
US8799318B2 (en) | Function module leveraging fuzzy search capability | |
CN106156339B (zh) | 保单管理系统的访问方法、装置及系统 | |
CN116233250B (zh) | 一种服务调用方法及网关设备 | |
CN107329707A (zh) | 统一存储的多存储设备管理方法、系统及gui管理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |