CN112379976A - 一种事件处理方法、装置、移动终端及存储介质 - Google Patents

一种事件处理方法、装置、移动终端及存储介质 Download PDF

Info

Publication number
CN112379976A
CN112379976A CN202011281636.XA CN202011281636A CN112379976A CN 112379976 A CN112379976 A CN 112379976A CN 202011281636 A CN202011281636 A CN 202011281636A CN 112379976 A CN112379976 A CN 112379976A
Authority
CN
China
Prior art keywords
event
processing logic
response
event processing
responder object
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.)
Pending
Application number
CN202011281636.XA
Other languages
English (en)
Inventor
张国政
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Ruijia Information Technology Co ltd
Original Assignee
Shanghai Ruijia Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Ruijia Information Technology Co ltd filed Critical Shanghai Ruijia Information Technology Co ltd
Priority to CN202011281636.XA priority Critical patent/CN112379976A/zh
Publication of CN112379976A publication Critical patent/CN112379976A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种事件处理方法、装置、移动终端及存储介质。所述方法,包括:在触发任一事件的情况下,基于操作系统中预设的响应链,将所述事件和所述事件的初始数据沿着所述响应链逐层传递,所述响应链的设计模式为责任链模式,且所述响应链中每一层为一个响应者对象;在所述事件和所述初始数据传递至所述响应链中的目标响应者对象时停止事件传递,并从所述目标响应者对象中获取所述事件的事件处理逻辑,所述目标响应者对象为注册处理所述事件的响应者对象;通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理。从而取得了减少代码耦合度和冗余代码的有益效果。

Description

一种事件处理方法、装置、移动终端及存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种事件处理方法、装置、移动终端及存储介质。
背景技术
随着移动终端技术的不断发展,各种移动终端被广泛应用于人们的日常生活中,移动终端中可以安装各类的应用程序,为人们的生活带来便利的同时,也为用户带来更多的娱乐。随着应用程序的功能越来越强大,页面对应的视图层级设计越来越复杂,层级越来越多,导致位于页面的控件的事件处理越来越复杂。现有的针对UI控件事件处理,通常采用Delegate代理或者Block传递方式。
但是,使用Delegate或Block进行跨层通信时,需要额外维护变量,增加代码耦合度,且在实现时会产生很多冗余代码。而且,一对一对象通信滥用Notification Center(通知中心)会降低App(Application,应用程序)的可维护性。
发明内容
本发明实施例提供一种事件处理方法、装置、移动终端及存储介质,以解决现有的事件处理过程会产生很多冗余代码,容易增加代码耦合度,而且降低App的可维护性的问题。
为了解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种事件处理方法,包括:
在触发任一事件的情况下,基于操作系统中预设的响应链,将所述事件和所述事件的初始数据沿着所述响应链逐层传递,所述响应链的设计模式为责任链模式,且所述响应链中每一层为一个响应者对象;
在所述事件和所述初始数据传递至所述响应链中的目标响应者对象时停止事件传递,并从所述目标响应者对象中获取所述事件的事件处理逻辑,所述目标响应者对象为注册处理所述事件的响应者对象;
通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理。
可选地,每个所述响应者对象中包括一个公有的事件处理方法,所述事件处理方法用于调用所述事件处理方法所在响应者对象的下一个响应者对象中的所述事件处理方法;
所述将所述事件和所述事件的初始数据沿着所述响应链逐层传递的步骤,包括:
针对所述响应链中的首个响应者对象,通过所述首个响应者对象中的事件处理方法,调用所述首个响应者对象的下一个响应对象中的所述事件处理方法以传递所述事件,并传递所述初始数据;
在所述事件和所述初始数据在所述响应链中逐层传递的过程中,针对任一中间层的响应者对象,如果所述响应者对象还需传递额外数据,通过改写所述响应者对象中的事件处理方法,以通过改写后的事件处理方法传递所述初始数据和所述额外数据,并通过所述改写后的事件处理方法调用所述响应者对象的下一个响应者对象中的所述事件处理方法;
其中,所述额外数据为不同于所述初始数据的数据。
可选地,在所述从所述目标响应者对象中获取所述事件的事件处理逻辑的步骤之前,还包括:
在目标响应者对象中注册所述事件的事件处理逻辑,并建立所述事件的事件标识与事件处理逻辑之间的映射关系。
可选地,所述在目标响应者对象中注册所述事件的事件处理逻辑,并建立所述事件的事件标识与事件处理逻辑之间的映射关系的步骤,包括:
在目标响应者对象中添加至少一个字典属性,用于存储事件标识与事件处理逻辑之间的映射关系;
通过在所述目标响应者对象中添加的注册事件方法,将所述事件的事件标识和事件处理逻辑分别存储到所述字典属性中。
可选地,所述从所述目标响应者对象中获取所述事件的事件处理逻辑的步骤,包括:
根据所述事件的事件标识,以及所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,从所述目标响应者对象中查找所述事件的事件处理逻辑;
响应于根据所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,未查找到所述事件的事件处理逻辑,检测所述目标响应者对象的下一个响应者属性是否为空;
响应于所述目标响应者对象的下一个响应者属性为空,返回事件响应异常;
响应于所述目标响应者对象的下一个响应者属性不为空,调用所述目标响应者对象的下一个响应者对象中的事件处理方法,以从所述下一个响应者对象中查找所述事件的事件处理逻辑。
可选地,所述事件处理逻辑通过NSInvocation或Block执行;所述事件和所述事件的数据在所述响应链中传递过程中,通过对象表示所述事件标识和所述数据,且以Class类型的事件标识作为所述对象的对象名称,以所述数据作为所述对象包含的属性。
可选地,所述在目标响应者对象中添加至少一个字典属性,用于存储事件标识与事件处理逻辑之间的映射关系的步骤,包括:
在所述目标响应者对象中添加两个字典属性,其中一个字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,另一个字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
所述通过在所述目标响应者对象中添加的注册事件方法,将所述事件的事件标识和事件处理逻辑分别存储到所述字典属性中的步骤,包括:
通过在所述目标响应者对象中添加的注册事件方法,将包含事件处理逻辑的Objective-C消息存储到第一字典属性中,将包含事件处理逻辑的Block存储到第二字典属性中;
其中,所述第一字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,所述第二字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
可选地,所述通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理的步骤,包括:
响应于所述事件处理逻辑通过Block执行,通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑对应的Block,完成对所述事件的响应处理;
响应于所述事件处理逻辑通过NSInvocation执行,通过所述目标响应者对象,基于所述初始数据触发所述事件处理逻辑对应的Objective-C消息,完成对所述事件的响应处理。
第二方面,本发明实施例提供了一种事件处理装置,包括:
事件传递模块,用于在触发任一事件的情况下,基于操作系统中预设的响应链,将所述事件和所述事件的初始数据沿着所述响应链逐层传递,所述响应链的设计模式为责任链模式,且所述响应链中每一层为一个响应者对象;
处理逻辑获取模块,用于在所述事件和所述初始数据传递至所述响应链中的目标响应者对象时停止事件传递,并从所述目标响应者对象中获取所述事件的事件处理逻辑,所述目标响应者对象为注册处理所述事件的响应者对象;
事件响应处理模块,用于通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理。
可选地,每个所述响应者对象中包括一个公有的事件处理方法,所述事件处理方法用于调用所述事件处理方法所在响应者对象的下一个响应者对象中的所述事件处理方法;
所述事件传递模块,包括:
第一事件传递子模块,用于针对所述响应链中的首个响应者对象,通过所述首个响应者对象中的事件处理方法,调用所述首个响应者对象的下一个响应对象中的所述事件处理方法以传递所述事件,并传递所述初始数据;
第二事件传递子模块,用于在所述事件和所述初始数据在所述响应链中逐层传递的过程中,针对任一中间层的响应者对象,如果所述响应者对象还需传递额外数据,通过改写所述响应者对象中的事件处理方法,以通过改写后的事件处理方法传递所述初始数据和所述额外数据,并通过所述改写后的事件处理方法调用所述响应者对象的下一个响应者对象中的所述事件处理方法;
其中,所述额外数据为不同于所述初始数据的数据。
可选地,所述装置,还包括:
事件注册模块,用于在目标响应者对象中注册所述事件的事件处理逻辑,并建立所述事件的事件标识与事件处理逻辑之间的映射关系。
可选地,所述事件注册模块,包括:
字典属性添加子模块,用于在目标响应者对象中添加至少一个字典属性,用于存储事件标识与事件处理逻辑之间的映射关系;
事件注册子模块,用于通过在所述目标响应者对象中添加的注册事件方法,将所述事件的事件标识和事件处理逻辑分别存储到所述字典属性中。
可选地,所述处理逻辑获取模块,包括:
第一处理逻辑获取子模块,用于根据所述事件的事件标识,以及所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,从所述目标响应者对象中查找所述事件的事件处理逻辑;
属性检测子模块,用于响应于根据所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,未查找到所述事件的事件处理逻辑,检测所述目标响应者对象的下一个响应者属性是否为空;
响应异常返回子模块,用于响应于所述目标响应者对象的下一个响应者属性为空,返回事件响应异常;
第二处理逻辑获取子模块,用于响应于所述目标响应者对象的下一个响应者属性不为空,调用所述目标响应者对象的下一个响应者对象中的事件处理方法,以从所述下一个响应者对象中查找所述事件的事件处理逻辑。
可选地,所述事件处理逻辑通过NSInvocation或Block执行;所述事件和所述事件的数据在所述响应链中传递过程中,通过对象表示所述事件标识和所述数据,且以Class类型的事件标识作为所述对象的对象名称,以所述数据作为所述对象包含的属性。
可选地,所述字典属性添加子模块,具体用于:
在所述目标响应者对象中添加两个字典属性,其中一个字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,另一个字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
所述事件注册子模块,具体用于包括:
通过在所述目标响应者对象中添加的注册事件方法,将包含事件处理逻辑的Objective-C消息存储到第一字典属性中,将包含事件处理逻辑的Block存储到第二字典属性中;
其中,所述第一字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,所述第二字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
可选地,所述事件响应处理模块,包括:
第一事件响应处理子模块,用于响应于所述事件处理逻辑通过Block执行,通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑对应的Block,完成对所述事件的响应处理;
第二事件响应处理子模块,用于响应于所述事件处理逻辑通过NSInvocation执行,通过所述目标响应者对象,基于所述初始数据触发所述事件处理逻辑对应的Objective-C消息,完成对所述事件的响应处理。
第三方面,本发明实施例另外提供了一种移动终端,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面所述的事件处理方法的步骤。
第四方面,本发明实施例另外提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的事件处理方法的步骤。
在本发明实施例中,在本发明实施例中,采用面向对象的方式表示事件及数据,通过响应链传将事件传递到注册处理该事件的响应者上。从而提供新的对象间交互思路,解决了数据需要在同个视图层级结构的多个对象间传递的痛点,而且避免了对象间引用问题,减少代码耦合度和冗余代码。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中的一种事件处理方法的步骤流程图;
图2是本发明实施例中的另一种事件处理方法的步骤流程图;
图3是本发明实施例中的一种响应链中各个UIResponder对象内事件处理方法的调用流程示意图;
图4A是本发明实施例中的一种iOS中通知中心对于通知的处理方式示意图;
图4B是本发明实施例中的一种响应链传递事件的示意图;
图5是本发明实施例中的一种确定目标响应者对象后事件响应过程的示意图;
图6是本发明实施例中的一种事件处理装置的结构示意图;
图7是本发明实施例中的另一种事件处理装置的结构示意图;
图8是本发明实施例中的一种移动终端的硬件结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,示出了本发明实施例中一种事件处理方法的步骤流程图。
步骤110,在触发任一事件的情况下,基于操作系统中预设的响应链,将所述事件和所述事件的初始数据沿着所述响应链逐层传递,所述响应链的设计模式为责任链模式,且所述响应链中每一层为一个响应者对象;
步骤120,在所述事件和所述初始数据传递至所述响应链中的目标响应者对象时停止事件传递,并从所述目标响应者对象中获取所述事件的事件处理逻辑,所述目标响应者对象为注册处理所述事件的响应者对象;
步骤130,通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理。
具体的,本实施例中,控件事件处理方法可以应用于智能手机、平板电脑之类的移动终端,还可以应用于台式计算机等设备,当然,还可以应用于其它移动终端,在此,本申请不做限制。
移动终端中安装有操作系统,例如安卓系统、iOS(苹果公司的移动操作系统),还安装有各类的应用程序,应用程序的页面中会有许多的视图控件(UIButton),由于页面的视图层级设计可能会比较复杂,所以,有些控件的视图层级较深。本实施例,借助于操作系统的响应链机制,对于视图层级较深的控件对应的事件进行传递。操作系统提供了响应链机制,可以用于事件传递。
iOS的UIKit框架使用了责任链模式,App使用UIResponder(响应者)对象接收和处理事件。当App接收到事件,UIKit自动引导事件到底部最适合的响应者对象,即firstresponder。无法处理的事件可以沿着激活的响应链传递,最终传到App Delegate。
其中,UIkit是一款轻量级、模块化的前端框架,可快速构建强大的web前端界面。责任链模式是一种设计模式,在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,包括触摸事件(TouchEvents)、运动事件(Motion Events)、远程控制事件(Remote Control Events),等等。
因此,在本发明实施例中,可以通过UIResponder对象处理事件,因此可以设置响应链中每一层为一个UIResponder对象,而且为了方便事件及其数据在响应链中自动逐层传递以,可以设置响应链的设计模式为上述的责任链模式,以可以通过前一层自动调用后一层,实现自动逐层传递。
而且,在本发明实施例中,可以针对不同的事件,在响应链中的任一UIResponder对象中注册处理该事件,例如在其中设置该事件的处理逻辑,此时该UIResponder对象可以理解为该事件最适合的响应者对象,即first responder,在本发明实施例中可以称之为目标响应者对象。其中,可以在不同UIResponder对象中注册处理不同事件,也可以在响应链中的同一UIResponder对象中注册处理每个事件,具体可以根据需求进行自定义设置,对此本发明实施例不加以限定。
例如,可以将全部事件的事件处理逻辑注册于响应链中的指定层(例如最后一层)的UIResponder对象中,方便管理;而且不同事件的处理逻辑可以分散注册在响应链中不同的UIResponder对象中,以均衡各个UIResponder对象的事件响应能力。
那么,对于移动终端而言,在触发任一事件的情况下,可以基于其操作系统中预设的响应链,将所述事件和所述事件的初始数据沿着所述响应链逐层传递,所述响应链的设计模式为责任链模式,且所述响应链中每一层为一个响应者对象;在所述事件和所述初始数据传递至所述响应链中的目标响应者对象时停止事件传递,并从所述目标响应者对象中获取所述事件的事件处理逻辑,所述目标响应者对象为注册处理所述事件的响应者对象,进而可以通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理。
其中,事件的初始数据可以包括与响应该事件相关的任何数据,例如触发事件对应的视图控件的标识、触发事件的点击位置坐标、触发事件对应的视图的标识、业务后端下发的用于埋点的数据,等等。而且,事件的事件处理逻辑可以通过任何可用方式实现,对此本发明实施例也不加以限定。
参照图2,在本发明实施例中,每个所述响应者对象中包括一个公有的事件处理方法,所述事件处理方法用于调用所述事件处理方法所在响应者对象的下一个响应者对象中的所述事件处理方法,所述步骤110进一步可以包括:
步骤111,针对所述响应链中的首个响应者对象,调用所述首个响应者对象中的事件处理方法以传递所述事件,并传递所述初始数据;
步骤112,在所述事件和所述初始数据在所述响应链中逐层传递的过程中,针对任一中间层的响应者对象,如果所述响应者对象还需传递额外数据,通过改写所述响应者对象中的事件处理方法,以通过改写后的事件处理方法传递所述初始数据和所述额外数据,并通过所述改写后的事件处理方法调用所述响应者对象的下一个响应者对象中的所述事件处理方法;
其中,所述额外数据为不同于所述初始数据的数据。
在本发明实施例中,为了实现责任链模式的响应链,可以在响应链的基础上对UIResponder进行扩展,在每个UIResponder对象里定义一个公有的事件处理方法,该事件处理方法默认实现是调用自身也即该UIResponder对象的下一个响应者对象中的该事件处理方法,如图3所示为一种响应链中各个UIResponder对象内事件处理方法的调用流程示意图。
那么事件在响应链的传递过程中,使用过程如下:
1.对于响应链中的首个响应者对象,也即上游响应者对象,可以通过其自身包含的事件处理方法调用下一个响应者对象中的事件处理方法并传递初始数据。
2.对于响应链中的相应事件的目标响应者对象,也即下游响应者对象,可以根据响应需求重写其中的事件处理方法进行实际的事件响应操作。
3.对于响应链中首个响应者对象至目标响应者对象中间的各个响应者对象,也即中游响应者对象而言,由于事件的传递过程中,某些页面或者是对象会进行交互并产生与响应相关的数据,为了区别与初始数据,可以称之为额外数据,如果事件在响应链的相邻两层传递过程中产生额外数据,那么为了传递初始数据的同时传递额外数据,也可以根据需求重写该中游响应者对象中的事件处理方法并传递额外数据,另外重写后的事件处理方法最后仍然要调用自身的下一个响应者对象中的事件处理方法。而如果对于当前中游响应者对象,在传递数据和事件时并未产生额外数据,则可以不重写其中的事件处理方法。
其中,传递额外数据是事件处理方法的改写逻辑可以根据需求进行自定义设置,并且可以预先设置在响应链中,对此本发明实施例不加以限定。
参照图2,在本发明实施例中,在所述步骤120之前,还可以包括:
步骤10,在目标响应者对象中注册所述事件的事件处理逻辑,并建立所述事件的事件标识与事件处理逻辑之间的映射关系。
在实际应用中,UIResponder对象在处理大量事件时,需要写很多if-else语句判断事件名称再执行相应逻辑。使得查找事件处理逻辑的时间较长,且增加代码耦合可能性,影响事件响应效率。
因此,在本发明实施例中,为了避免上述问题,联想到iOS中通知中心NSNotificationCenter类对于通知的处理方式(实际上是一个通知分发表),如图4A所示,其中观察者和发送者可以为进行通过通知中心进行交互的任意对象,因此在本发明实施例中,也可以采用类似的注册机制,在事件标识和事件处理逻辑之间建立联系。这样就可以把响应链当成同一个视图层级上的一对一通知。也即在目标响应者对象中注册所述事件的事件处理逻辑,并建立所述事件的事件标识与事件处理逻辑之间的映射关系。其中的事件标识可以为一种可以表征实际身份的标识,例如事件名称等。
其中,Notification Center(通知中心)是一个中心化的枢纽。应用的任何部分都可以通过它向其他部分发送通知,或者接收来自别人的通知。观察者通过通知中心进行注册,对特定的事件注册特定的响应动作。每次这个事件发生时,通知经过分发表分发之后,会通知所有注册这个事件的观察者。
如图4B所示,在本发明实施例中,可以将响应链中任一响应者对象自身作为调度中心,例如图4B中深色图标所示,在其中记录各个事件的事件标识与事件处理逻辑之间的映射关系。事件及其数据最终会层层传递至该调度中心,以基于映射关系获取其中与该事件的事件标识存在映射关系的事件处理逻辑,以进行事件响应。
可选地,在本发明实施例中,所述步骤10进一步可以包括:
步骤11,在目标响应者对象中添加至少一个字典属性,用于存储事件标识与事件处理逻辑之间的映射关系;
步骤12,通过在所述目标响应者对象中添加的注册事件方法,将所述事件的事件标识和事件处理逻辑分别存储到所述字典属性中。
为了记录事件标识与事件处理逻辑之间的映射关系,可以在目标响应者对象中添加至少一个字典属性,而且为了方便在字典属性中注册事件处理逻辑并建立事件处理逻辑与事件标识之间的映射关系,可以在目标响应者对象中添加的注册事件方法,以将所述事件的事件标识和事件处理逻辑分别存储到所述字典属性中。
其中,可以通过任何可用方式在目标响应者对象中添加字典属性,对此本发明实施例不加以限定。例如,可以在UIResponder对象中用运行时的特性,也即关联对象(Associated Object,是Objective-C中的一个特性)添加字典属性。而且,字典属性中可以存储的数据形式可以为key-value(键值对)形式,在本发明实施例中,key可以为事件标识,value可以为事件处理逻辑,从而建立事件标识和事件处理逻辑之间的映射关系。
参照图2,在本发明实施例中,所述步骤120进一步可以包括:
步骤121,根据所述事件的事件标识,以及所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,从所述目标响应者对象中查找所述事件的事件处理逻辑;
步骤122,响应于根据所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,未查找到所述事件的事件处理逻辑,检测所述目标响应者对象的下一个响应者属性是否为空;
步骤123,响应于所述目标响应者对象的下一个响应者属性为空,返回事件响应异常;
步骤124,响应于所述目标响应者对象的下一个响应者属性不为空,调用所述目标响应者对象的下一个响应者对象中的事件处理方法,以从所述下一个响应者对象中查找所述事件的事件处理逻辑。
在获取事件的事件处理逻辑的过程中,可以优先根据所述事件的事件标识,以及所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,从所述目标响应者对象中查找所述事件的事件处理逻辑,如果由于注册事件被删除、事件处理逻辑被删除或者映射关系被删除等原因,使得根据所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,未查找到所述事件的事件处理逻辑,则可以反馈事件响应异常。而如果根据所述事件的事件标识,以及所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,从所述目标响应者对象中查找到所述事件的事件处理逻辑,则可以直接以当前查找到的事件处理逻辑作为相应事件的事件处理逻辑。
但是,在实际应用中,在目标响应者对象之后的响应者对象中也可能记录有事件标识与事件处理逻辑之间的映射关系,可以其中可能包含有与当前事件对应的事件处理逻辑,而且在实际应用中,对于每个响应者对象而言,其中包含的下一个响应者属性可以表征在响应链中该响应者对象之后是否还有响应者对象,例如如果下一个响应者属性不为空,则表征其对应有下一个响应者对象,而如果下一个响应者属性为空,则表明该响应者对象为响应链中的最后一个响应者对象,其之后不存在响应者对象。
因此在本发明实施例中,在从目标响应者对象中未查找到所述事件的事件处理逻辑,进一步检测所述目标响应者对象是否对应有下一响应者对象,也即其下一个响应者属性是否为空,如果为空则可以直接返回事件响应异常,告知相关用户事件无法正常响应。
而如果目标响应者对象的下一个响应者属性不为空,则可以继续基于该目标响应者对象中的事件处理方法,调用所述目标响应者对象的下一个响应者对象中的事件处理方法,以进行事件和数据的传递,并且从所述下一个响应者对象中查找所述事件的事件处理逻辑。此时,对应该下一个响应者对象而言,如果在其中查找到与相应事件对应的事件处理逻辑,则可以基于该下一个响应者对象,基于数据执行所述事件处理逻辑,完成对所述事件的响应处理。而如果在其中未查找到与相应事件对应的事件处理逻辑,则可以参照上述步骤122-124,继续遍历响应链后续的响应者对象,直至查找到事件的事件处理逻辑完成事件响应,或者是直至响应链中的最后一个响应者对象且其中的下一个响应者属性为空,则返回事件响应异常。
其中,表征事件响应异常的方式可以根据需求进行自定义设置,对此本发明实施例不加以限定。例如,可以通过在移动终端的视图展示中包含“响应异常”字样的弹出框,以返回事件响应异常,等等。
可选地,在本发明实施例中,所述事件处理逻辑通过NSInvocation或Block执行;所述事件和所述事件的数据在所述响应链中传递过程中,通过对象表示所述事件标识和所述数据,且以Class类型的事件标识作为所述对象的对象名称,以所述数据作为所述对象包含的属性。
在本发明实施例中,可以使用NSInvocation或Block来执行事件处理逻辑。而且,可以使用NSInvocation执行部分事件的事件处理逻辑,通过Block来执行部分事件的事件处理逻辑,或者也可以通过NSInvocation执行全部事件的事件处理逻辑,或者也可以通过Block来执行全部事件的事件处理逻辑,具体可以可以根据需求进行自定义设置,对此本发明实施例不加以限定。其中,NSInvocation是一个消息调用类,它包含了所有OC(Objective-C,扩充C的面向对象编程语言)消息的成分:target(目标对象)、selector(选择器)、参数以及返回值。NSInvocation可以将消息转换成一个对象,消息的每一个参数能够直接设定,而且当一个NSInvocation对象调度时返回值是可以自己设定的。Block是带有自动变量的匿名函数,可以将方法的具体实现进行抽象并传入当前上下文中。
当然,如果在响应链中其他响应者对象中设置事件标识与事件处理逻辑之间的映射关系,也可以参照上述方式,对此本发明实施例不加以限定。
此外,在本发明实施例中,可以使用字符串作为事件标识来标识每一个事件,用于注册和销毁事件。但是,字符串的形式容易导致事件标识的管理比较松散,可能出现旧事件与新事件的事件标识相同从而被覆盖的情况等。而且,使用字符串导致的问题是无法作静态检查,因此很容易导致错误。因此在本发明实施例中,为了避免字符串作为事件标识导致的上述异常情况,针对当前被触发的事件,可以使用一个对象来表示该事件并进行传递,从而可以增加代码可读性,保证类型安全。具体地,可以通过对象表示事件,且以相应对象的事件标识作为该对象的对象名称,且在该对象中,作为对象名称的事件标识为Class类型。
另外,在响应链中传递事件和数据的过程中,如果响应事件所需的相关数据,也即在响应链中随着事件一起传递的数据,例如上述的原始数据和额外数据等使用字典(例如上述的key-value形式的字典属性等)的形式存放,好处是更改灵活,但是随着项目的复杂度增大,字典的可读性和健壮性会大大降低。而且上述字典导致的问题也很难作静态检查,因此很容易导致错误。那么为了避免上述问题,可以使用一个对象同时表示事件及其数据,不仅可以增加代码可读性,保证类型安全,还可以添加业务逻辑处理数据,例如业务后端下发的用于埋点的数据等。
具体地,事件被触发后,可以通过对象表示所述事件标识和所述数据(例如上述的初始数据、额外数据等),而且在相应对象中以Class类型的事件标识作为所述对象的对象名称,以所述数据作为所述对象包含的属性,此时不同对象类型中的对象标识一定不同,因此可以有效避免由于旧事件与新事件重名从而被覆盖的异常情况。其中,通过对象表示的数据可以包括上述的初始数据、额外数据中的至少一种,对此本发明实施例不加以限定。
而且,对于目标响应者对象而言,其中包含的可以是字符串形式的事件标识与事件处理逻辑之间的映射关系,那么为了从目标响应者对象中获取当前触发事件的事件处理逻辑,则可以从对象表示的该事件的对象名称中获取Class类型的事件标识,并将其转换为字符串类型,以获取与之映射的事件处理逻辑。
或者,在本发明实施例中,在构建事件与事件处理逻辑之间的映射关系时,也可以设置事件标识为Class类型,或者通过对象表示事件标识,对此本发明实施例不加以限定。
可选地,在本发明实施例中,所述步骤11进一步可以包括:在所述目标响应者对象中添加两个字典属性,其中一个字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,另一个字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
可选地,在本发明实施例中,所述步骤12进一步可以包括:通过在所述目标响应者对象中添加的注册事件方法,将包含事件处理逻辑的Objective-C消息存储到第一字典属性中,将包含事件处理逻辑的Block存储到第二字典属性中;
其中,所述第一字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,所述第二字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
如上述,可以使用NSInvocation或Block来执行事件处理逻辑,因此在本发明实施例中,可以设置两个字典属性,分别用于存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,以及事件标识到通过Block执行的事件处理逻辑的映射关系。
而且,对于使用NSInvocation来执行的事件处理逻辑,可以将事件处理逻辑放到Objective-C消息中封装成NSInvocation,因此在每次创建新的事件处理逻辑的情况下,为了创建事件标识到事件处理逻辑的映射关系,可以通过在所述目标响应者对象中添加的注册事件方法,将包含事件处理逻辑的Objective-C消息存储到第一字典属性中,将包含事件处理逻辑的Block存储到第二字典属性中;其中,所述第一字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,所述第二字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
例如,假设注册有三个事件的事件处理逻辑,且三个事件分别为事件1、事件2和事件3,假设使用NSInvocation执行事件1和事件2的事件处理逻辑,使用Block执行事件3的事件处理逻辑,那么此时可以在其中一个字典属性(例如第一字典属性)中记录事件1的事件标识与其事件处理逻辑之间的映射关系、事件2的事件标识与其事件处理逻辑之间的映射关系,而在另一个字典属性(例如第二字典属性)中记录事件3的事件标识与其事件处理逻辑之间的映射关系。
参照图2,在本发明实施例中,所述步骤130进一步可以包括:
步骤131,响应于所述事件处理逻辑通过Block执行,通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑对应的Block,完成对所述事件的响应处理;
步骤132,响应于所述事件处理逻辑通过NSInvocation执行,通过所述目标响应者对象,基于所述初始数据触发所述事件处理逻辑对应的Objective-C消息,完成对所述事件的响应处理。
如果最终确定当前触发事件的事件处理逻辑通过Block执行,则可以通过当前确定的事件处理逻辑所在的响应者对象,基于所述初始数据、以及传递过程中产生的额外数据等执行相应事件处理逻辑对应的Block,完成对所述事件的响应处理,而如果最终确定当前触发事件的事件处理逻辑通过NSInvocation执行,则可以通过当前确定的事件处理逻辑所在的响应者对象,基于所述初始数据、以及传递过程中产生的额外数据等触发相应包含事件处理逻辑的Objective-C消息,以完成对所述事件的响应处理。
具体地,在触发相应包含事件处理逻辑的Objective-C消息时,可以根据需求,基于所述初始数据、以及传递过程中产生的额外数据等设置其中的参数,例如实际处理的响应者对象的名称、方法名称、实现响应的相关参数等,并触发该Objective-C消息传递给相应最终确定的响应者对象自身,以完成对所述事件的响应处理。
如图5所示为一种确定目标响应者对象后事件响应过程的示意图。可以从目标响应者对象的字典属性中取出与当前触发事件的事件标识关联的表征事件处理逻辑的NSInvocation变量和Block变量,如果NSInvocation变量不为空,也即存在通过NSInvocation执行的事件处理逻辑,则可以设置参数并触发相应的Objective-C消息,完成事件响应并结束,或者如果Block变量不为空,也即存在通过Block执行的事件处理逻辑,则可以执行相应的Block完成事件响应并结束,如果NSInvocation变量和Block变量均为空,则可以检测该目标响应者对象的下一个响应者属性是否为空,如果不为空,则可以进一步调用其事件处理方法,在后续响应者对象中重新查找相应事件的事件处理逻辑,以进行事件响应并结束,而如果该目标响应者对象的下一个响应者属性为空,则可以抛出异常并结束。
在本发明实施例中,采用面向对象的方式表示事件及数据,通过响应链传将事件传递到注册处理该事件的响应者上。从而提供新的对象间交互思路,解决了数据需要在同个视图层级结构的多个对象间传递的痛点,而且避免了对象间引用问题,减少代码耦合度,在正常使用场景中,事件传递耗时在0.1毫秒级内,对性能影响极低。
需要说明的是,本发明实施例的方案可以根据需求应用于IOS、Android、Windows等任何一种操作系统中针对任一App的触发事件进行事件响应,对此本发明实施例不加以限定。而且,可以针对不同的APP分别设置各自的响应链和目标响应者对象,对此本发明实施例也不加以限定。
参照图6,示出了本发明实施例中一种事件处理装置的结构示意图。
本发明实施例的事件处理装置包括:事件传递模块210、处理逻辑获取模块220和事件响应处理模块230。
下面分别详细介绍各模块的功能以及各模块之间的交互关系。
事件传递模块210,用于在触发任一事件的情况下,基于操作系统中预设的响应链,将所述事件和所述事件的初始数据沿着所述响应链逐层传递,所述响应链的设计模式为责任链模式,且所述响应链中每一层为一个响应者对象;
处理逻辑获取模块220,用于在所述事件和所述初始数据传递至所述响应链中的目标响应者对象时停止事件传递,并从所述目标响应者对象中获取所述事件的事件处理逻辑,所述目标响应者对象为注册处理所述事件的响应者对象;
事件响应处理模块230,用于通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理。
可选地,每个所述响应者对象中包括一个公有的事件处理方法,所述事件处理方法用于调用所述事件处理方法所在响应者对象的下一个响应者对象中的所述事件处理方法;
参照图7,在本发明实施例中,所述事件传递模块210,进一步可以包括:
第一事件传递子模块211,用于针对所述响应链中的首个响应者对象,通过所述首个响应者对象中的事件处理方法,调用所述首个响应者对象的下一个响应对象中的所述事件处理方法以传递所述事件,并传递所述初始数据;
第二事件传递子模块212,用于在所述事件和所述初始数据在所述响应链中逐层传递的过程中,针对任一中间层的响应者对象,如果所述响应者对象还需传递额外数据,通过改写所述响应者对象中的事件处理方法,以通过改写后的事件处理方法传递所述初始数据和所述额外数据,并通过所述改写后的事件处理方法调用所述响应者对象的下一个响应者对象中的所述事件处理方法;其中,所述额外数据为不同于所述初始数据的数据。
参照图7,在本发明实施例中,所述装置,还可以包括:
事件注册模块140,用于在目标响应者对象中注册所述事件的事件处理逻辑,并建立所述事件的事件标识与事件处理逻辑之间的映射关系。
可选地,所述事件注册模块140,进一步可以包括:
字典属性添加子模块141,用于在目标响应者对象中添加至少一个字典属性,用于存储事件标识与事件处理逻辑之间的映射关系;
事件注册子模块142,用于通过在所述目标响应者对象中添加的注册事件方法,将所述事件的事件标识和事件处理逻辑分别存储到所述字典属性中。
参照图7,在本发明实施例中,所述处理逻辑获取模块220,进一步可以包括:
第一处理逻辑获取子模块221,用于根据所述事件的事件标识,以及所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,从所述目标响应者对象中查找所述事件的事件处理逻辑;
属性检测子模块222,用于响应于根据所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,未查找到所述事件的事件处理逻辑,检测所述目标响应者对象的下一个响应者属性是否为空;
响应异常返回子模块223,用于响应于所述目标响应者对象的下一个响应者属性为空,返回事件响应异常;
第二处理逻辑获取子模块224,用于响应于所述目标响应者对象的下一个响应者属性不为空,调用所述目标响应者对象的下一个响应者对象中的事件处理方法,以从所述下一个响应者对象中查找所述事件的事件处理逻辑。
可选地,所述事件处理逻辑通过NSInvocation或Block执行;所述事件和所述事件的数据在所述响应链中传递过程中,通过对象表示所述事件标识和所述数据,且以Class类型的事件标识作为所述对象的对象名称,以所述数据作为所述对象包含的属性。
可选地,所述字典属性添加子模块,具体可以用于:
在所述目标响应者对象中添加两个字典属性,其中一个字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,另一个字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
所述事件注册子模块,具体用于可以包括:
通过在所述目标响应者对象中添加的注册事件方法,将包含事件处理逻辑的Objective-C消息存储到第一字典属性中,将包含事件处理逻辑的Block存储到第二字典属性中;
其中,所述第一字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,所述第二字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
参照图7,在本发明实施例中,所述事件响应处理模块230,进一步可以包括:
第一事件响应处理子模块231,用于响应于所述事件处理逻辑通过Block执行,通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑对应的Block,完成对所述事件的响应处理;
第二事件响应处理子模块232,用于响应于所述事件处理逻辑通过NSInvocation执行,通过所述目标响应者对象,基于所述初始数据触发所述事件处理逻辑对应的Objective-C消息,完成对所述事件的响应处理。
本发明实施例提供的事件处理装置能够实现图1至图2的方法实施例中实现的各个过程,为避免重复,这里不再赘述。
优选的,本发明实施例还提供了一种移动终端,包括:处理器,存储器,存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述事件处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述事件处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-OnlyMemory,简称ROM)、随机存取存储器(RandomAccess Memory,简称RAM)、磁碟或者光盘等。
图8为实现本发明各个实施例的一种移动终端的硬件结构示意图。
该移动终端500包括但不限于:射频单元501、网络模块502、音频输出单元503、输入单元504、传感器505、显示单元506、用户输入单元507、接口单元508、存储器509、处理器510、以及电源511等部件。本领域技术人员可以理解,图8中示出的移动终端结构并不构成对移动终端的限定,移动终端可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。在本发明实施例中,移动终端包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、车载终端、可穿戴设备、以及计步器等。
应理解的是,本发明实施例中,射频单元501可用于收发信息或通话过程中,信号的接收和发送,具体的,将来自基站的下行数据接收后,给处理器510处理;另外,将上行的数据发送给基站。通常,射频单元501包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元501还可以通过无线通信系统与网络和其他设备通信。
移动终端通过网络模块502为用户提供了无线的宽带互联网访问,如帮助用户收发电子邮件、浏览网页和访问流式媒体等。
音频输出单元503可以将射频单元501或网络模块502接收的或者在存储器509中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元503还可以提供与移动终端500执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元503包括扬声器、蜂鸣器以及受话器等。
输入单元504用于接收音频或视频信号。输入单元504可以包括图形处理器(Graphics Processing Unit,GPU)5041和麦克风5042,图形处理器5041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元506上。经图形处理器5041处理后的图像帧可以存储在存储器509(或其它存储介质)中或者经由射频单元501或网络模块502进行发送。麦克风5042可以接收声音,并且能够将这样的声音处理为音频数据。处理后的音频数据可以在电话通话模式的情况下转换为可经由射频单元501发送到移动通信基站的格式输出。
移动终端500还包括至少一种传感器505,比如光传感器、运动传感器以及其他传感器。具体地,光传感器包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板5061的亮度,接近传感器可在移动终端500移动到耳边时,关闭显示面板5061和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别移动终端姿态(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;传感器505还可以包括指纹传感器、压力传感器、虹膜传感器、分子传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等,在此不再赘述。
显示单元506用于显示由用户输入的信息或提供给用户的信息。显示单元506可包括显示面板5061,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板5061。
用户输入单元507可用于接收输入的数字或字符信息,以及产生与移动终端的用户设置以及功能控制有关的键信号输入。具体地,用户输入单元507包括触控面板5071以及其他输入设备5072。触控面板5071,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板5071上或在触控面板5071附近的操作)。触控面板5071可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器510,接收处理器510发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板5071。除了触控面板5071,用户输入单元507还可以包括其他输入设备5072。具体地,其他输入设备5072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
进一步的,触控面板5071可覆盖在显示面板5061上,当触控面板5071检测到在其上或附近的触摸操作后,传送给处理器510以确定触摸事件的类型,随后处理器510根据触摸事件的类型在显示面板5061上提供相应的视觉输出。虽然在图8中,触控面板5071与显示面板5061是作为两个独立的部件来实现移动终端的输入和输出功能,但是在某些实施例中,可以将触控面板5071与显示面板5061集成而实现移动终端的输入和输出功能,具体此处不做限定。
接口单元508为外部装置与移动终端500连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元508可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到移动终端500内的一个或多个元件或者可以用于在移动终端500和外部装置之间传输数据。
存储器509可用于存储软件程序以及各种数据。存储器509可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器509可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器510是移动终端的控制中心,利用各种接口和线路连接整个移动终端的各个部分,通过运行或执行存储在存储器509内的软件程序和/或模块,以及调用存储在存储器509内的数据,执行移动终端的各种功能和处理数据,从而对移动终端进行整体监控。处理器510可包括一个或多个处理单元;优选的,处理器510可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器510中。
移动终端500还可以包括给各个部件供电的电源511(比如电池),优选的,电源511可以通过电源管理系统与处理器510逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
另外,移动终端500包括一些未示出的功能模块,在此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (11)

1.一种事件处理方法,其特征在于,包括:
在触发任一事件的情况下,基于操作系统中预设的响应链,将所述事件和所述事件的初始数据沿着所述响应链逐层传递,所述响应链的设计模式为责任链模式,且所述响应链中每一层为一个响应者对象;
在所述事件和所述初始数据传递至所述响应链中的目标响应者对象时停止事件传递,并从所述目标响应者对象中获取所述事件的事件处理逻辑,所述目标响应者对象为注册处理所述事件的响应者对象;
通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理。
2.根据权利要求1所述的方法,其特征在于,每个所述响应者对象中包括一个公有的事件处理方法,所述事件处理方法用于调用所述事件处理方法所在响应者对象的下一个响应者对象中的所述事件处理方法;
所述将所述事件和所述事件的初始数据沿着所述响应链逐层传递的步骤,包括:
针对所述响应链中的首个响应者对象,通过所述首个响应者对象中的事件处理方法,调用所述首个响应者对象的下一个响应对象中的所述事件处理方法以传递所述事件,并传递所述初始数据;
在所述事件和所述初始数据在所述响应链中逐层传递的过程中,针对任一中间层的响应者对象,如果所述响应者对象还需传递额外数据,通过改写所述响应者对象中的事件处理方法,以通过改写后的事件处理方法传递所述初始数据和所述额外数据,并通过所述改写后的事件处理方法调用所述响应者对象的下一个响应者对象中的所述事件处理方法;
其中,所述额外数据为不同于所述初始数据的数据。
3.根据权利要求1所述的方法,其特征在于,在所述从所述目标响应者对象中获取所述事件的事件处理逻辑的步骤之前,还包括:
在目标响应者对象中注册所述事件的事件处理逻辑,并建立所述事件的事件标识与事件处理逻辑之间的映射关系。
4.根据权利要求3所述的方法,其特征在于,所述在目标响应者对象中注册所述事件的事件处理逻辑,并建立所述事件的事件标识与事件处理逻辑之间的映射关系的步骤,包括:
在目标响应者对象中添加至少一个字典属性,用于存储事件标识与事件处理逻辑之间的映射关系;
通过在所述目标响应者对象中添加的注册事件方法,将所述事件的事件标识和事件处理逻辑分别存储到所述字典属性中。
5.根据权利要求4所述的方法,其特征在于,所述从所述目标响应者对象中获取所述事件的事件处理逻辑的步骤,包括:
根据所述事件的事件标识,以及所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,从所述目标响应者对象中查找所述事件的事件处理逻辑;
响应于根据所述字典属性中存储的事件标识与事件处理逻辑之间的映射关系,未查找到所述事件的事件处理逻辑,检测所述目标响应者对象的下一个响应者属性是否为空;
响应于所述目标响应者对象的下一个响应者属性为空,返回事件响应异常;
响应于所述目标响应者对象的下一个响应者属性不为空,调用所述目标响应者对象的下一个响应者对象中的事件处理方法,以从所述下一个响应者对象中查找所述事件的事件处理逻辑。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述事件处理逻辑通过NSInvocation或Block执行;所述事件和所述事件的数据在所述响应链中传递过程中,通过对象表示所述事件标识和所述数据,且以Class类型的事件标识作为所述对象的对象名称,以所述数据作为所述对象包含的属性。
7.根据权利要求6所述的方法,其特征在于,所述在目标响应者对象中添加至少一个字典属性,用于存储事件标识与事件处理逻辑之间的映射关系的步骤,包括:
在所述目标响应者对象中添加两个字典属性,其中一个字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,另一个字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
所述通过在所述目标响应者对象中添加的注册事件方法,将所述事件的事件标识和事件处理逻辑分别存储到所述字典属性中的步骤,包括:
通过在所述目标响应者对象中添加的注册事件方法,将包含事件处理逻辑的Objective-C消息存储到第一字典属性中,将包含事件处理逻辑的Block存储到第二字典属性中;
其中,所述第一字典属性存储事件标识到通过NSInvocation执行的事件处理逻辑的映射关系,所述第二字典属性存储事件标识到通过Block执行的事件处理逻辑的映射关系。
8.根据权利要求7所述的方法,其特征在于,所述通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理的步骤,包括:
响应于所述事件处理逻辑通过Block执行,通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑对应的Block,完成对所述事件的响应处理;
响应于所述事件处理逻辑通过NSInvocation执行,通过所述目标响应者对象,基于所述初始数据触发所述事件处理逻辑对应的Objective-C消息,完成对所述事件的响应处理。
9.一种事件处理装置,其特征在于,包括:
事件传递模块,用于在触发任一事件的情况下,基于操作系统中预设的响应链,将所述事件和所述事件的初始数据沿着所述响应链逐层传递,所述响应链的设计模式为责任链模式,且所述响应链中每一层为一个响应者对象;
处理逻辑获取模块,用于在所述事件和所述初始数据传递至所述响应链中的目标响应者对象时停止事件传递,并从所述目标响应者对象中获取所述事件的事件处理逻辑,所述目标响应者对象为注册处理所述事件的响应者对象;
事件响应处理模块,用于通过所述目标响应者对象,基于所述初始数据执行所述事件处理逻辑,完成对所述事件的响应处理。
10.一种移动终端,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至8中任一项所述的事件处理方法的步骤。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至8中任一项所述的事件处理方法的步骤。
CN202011281636.XA 2020-11-16 2020-11-16 一种事件处理方法、装置、移动终端及存储介质 Pending CN112379976A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011281636.XA CN112379976A (zh) 2020-11-16 2020-11-16 一种事件处理方法、装置、移动终端及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011281636.XA CN112379976A (zh) 2020-11-16 2020-11-16 一种事件处理方法、装置、移动终端及存储介质

Publications (1)

Publication Number Publication Date
CN112379976A true CN112379976A (zh) 2021-02-19

Family

ID=74585609

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011281636.XA Pending CN112379976A (zh) 2020-11-16 2020-11-16 一种事件处理方法、装置、移动终端及存储介质

Country Status (1)

Country Link
CN (1) CN112379976A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112988200A (zh) * 2021-04-19 2021-06-18 广州南方卫星导航仪器有限公司 一种控件状态更新方法、装置、设备和存储介质
CN113296863A (zh) * 2021-05-26 2021-08-24 平安国际智慧城市科技股份有限公司 基于ios系统的动态换肤方法、装置、设备及存储介质
CN113779131A (zh) * 2021-09-14 2021-12-10 树根互联股份有限公司 一种数据流联动的方法、装置、终端及存储介质
CN114205209A (zh) * 2021-12-03 2022-03-18 紫光云(南京)数字技术有限公司 设备下发配置的预警方法以及系统
CN114500686A (zh) * 2022-01-26 2022-05-13 梁浩 一种观察者-职责链模式的串口固定长度多协议处理方法
CN117130692A (zh) * 2023-10-23 2023-11-28 成都赛力斯科技有限公司 应用管理方法、装置、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106126355A (zh) * 2016-06-22 2016-11-16 百度在线网络技术(北京)有限公司 基于iOS系统的事件传递方法和装置
CN108228159A (zh) * 2018-02-02 2018-06-29 中国银行股份有限公司 一种基于响应链的对象交互方法及系统
CN110968432A (zh) * 2018-09-29 2020-04-07 武汉斗鱼网络科技有限公司 一种控件事件处理方法、装置及可读存储介质
WO2020114210A1 (zh) * 2018-12-04 2020-06-11 腾讯科技(深圳)有限公司 视图中的信息处理方法、装置及存储介质
CN111552620A (zh) * 2020-04-03 2020-08-18 北京字节跳动网络技术有限公司 数据获取方法、装置、终端及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106126355A (zh) * 2016-06-22 2016-11-16 百度在线网络技术(北京)有限公司 基于iOS系统的事件传递方法和装置
CN108228159A (zh) * 2018-02-02 2018-06-29 中国银行股份有限公司 一种基于响应链的对象交互方法及系统
CN110968432A (zh) * 2018-09-29 2020-04-07 武汉斗鱼网络科技有限公司 一种控件事件处理方法、装置及可读存储介质
WO2020114210A1 (zh) * 2018-12-04 2020-06-11 腾讯科技(深圳)有限公司 视图中的信息处理方法、装置及存储介质
CN111552620A (zh) * 2020-04-03 2020-08-18 北京字节跳动网络技术有限公司 数据获取方法、装置、终端及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
MANH PHAN: "Chain of Responsibility pattern", Retrieved from the Internet <URL:https://ducmanhphan.github.io/2019-02-27-Chain-of-Responsibility-pattern/> *
李莹;王甲民;庞德明;孙少云;杨祉雄;: "一种新的事件驱动的ERP集成技术", 计算机工程与应用, no. 17, 11 June 2006 (2006-06-11) *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112988200A (zh) * 2021-04-19 2021-06-18 广州南方卫星导航仪器有限公司 一种控件状态更新方法、装置、设备和存储介质
CN113296863A (zh) * 2021-05-26 2021-08-24 平安国际智慧城市科技股份有限公司 基于ios系统的动态换肤方法、装置、设备及存储介质
CN113779131A (zh) * 2021-09-14 2021-12-10 树根互联股份有限公司 一种数据流联动的方法、装置、终端及存储介质
CN114205209A (zh) * 2021-12-03 2022-03-18 紫光云(南京)数字技术有限公司 设备下发配置的预警方法以及系统
CN114205209B (zh) * 2021-12-03 2024-01-05 紫光云(南京)数字技术有限公司 设备下发配置的预警方法以及系统
CN114500686A (zh) * 2022-01-26 2022-05-13 梁浩 一种观察者-职责链模式的串口固定长度多协议处理方法
CN114500686B (zh) * 2022-01-26 2023-09-19 梁浩 一种观察者-职责链模式的串口固定长度多协议处理方法
CN117130692A (zh) * 2023-10-23 2023-11-28 成都赛力斯科技有限公司 应用管理方法、装置、电子设备及存储介质
CN117130692B (zh) * 2023-10-23 2024-01-23 成都赛力斯科技有限公司 应用管理方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN110752980B (zh) 一种消息发送方法及电子设备
CN112379976A (zh) 一种事件处理方法、装置、移动终端及存储介质
CN111010332A (zh) 一种群聊方法及电子设备
CN109857494B (zh) 一种消息提示方法及终端设备
CN109471690B (zh) 一种消息显示方法及终端设备
CN110674490B (zh) 应用权限显示方法、装置及移动终端
CN110647266A (zh) 一种信息显示方法及终端设备
CN108681427B (zh) 一种访问权限控制的方法及终端设备
CN111030917B (zh) 一种消息显示方法及电子设备
CN111026464A (zh) 一种识别方法及电子设备
CN109522278B (zh) 一种文件存储方法及终端设备
CN111443844A (zh) 信息处理方法及电子设备
CN110457935B (zh) 一种权限配置方法及终端设备
CN110703972B (zh) 一种文件控制方法及电子设备
CN110049486B (zh) 一种sim卡选择方法及终端设备
CN110049187B (zh) 一种显示方法及终端设备
CN111459362A (zh) 信息显示方法、信息显示装置、电子设备及存储介质
CN111124706A (zh) 一种应用程序分享方法及电子设备
CN110888705A (zh) 处理未读消息角标的方法及电子设备
CN110769118A (zh) 一种消息提示方法及终端设备
CN110898424B (zh) 一种显示控制方法及电子设备
CN111090529B (zh) 共享信息的方法及电子设备
CN110012152B (zh) 一种界面显示方法及终端设备
CN111131607A (zh) 一种信息共享方法、电子设备及计算机可读存储介质
CN111562959A (zh) 一种图标管理方法及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination