CN113515391A - 消息处理的方法、装置、电子设备和计算机可读存储介质 - Google Patents
消息处理的方法、装置、电子设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN113515391A CN113515391A CN202110526717.XA CN202110526717A CN113515391A CN 113515391 A CN113515391 A CN 113515391A CN 202110526717 A CN202110526717 A CN 202110526717A CN 113515391 A CN113515391 A CN 113515391A
- Authority
- CN
- China
- Prior art keywords
- message
- queue
- thread
- target type
- message queue
- 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
Links
- 238000003672 processing method Methods 0.000 title description 9
- 238000000034 method Methods 0.000 claims abstract description 126
- 230000008569 process Effects 0.000 claims abstract description 64
- 238000004590 computer program Methods 0.000 claims description 29
- 238000005538 encapsulation Methods 0.000 claims description 27
- 230000004044 response Effects 0.000 claims description 11
- 239000003795 chemical substances by application Substances 0.000 description 30
- 238000010586 diagram Methods 0.000 description 14
- 239000011230 binding agent Substances 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000004806 packaging method and process Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message 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)
- Mobile Radio Communication Systems (AREA)
Abstract
本公开涉及一种消息处理的方法、装置、电子设备和计算机可读存储介质。通过设置两个消息队列和两个线程,将不为目标类型的消息发送至第一消息队列,由第一线程对第一消息队列中的消息进行处理,将目标类型的消息发送至第二消息队列,由第二线程对第二消息队列中的消息进行处理,第二线程处理目标类型的消息,消息数量较少,消息等待时间较短,处理效率较高,从而,减少了ANR现象的出现。并且由于将第一线程处理的部分消息迁移到第二线程进行处理,减少了第一线程处理的消息的数量,减少消息的等待时间,进一步地提高了消息的处理效率。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种消息处理的方法、装置、电子设备和计算机可读存储介质。
背景技术
在安卓(Android)框架中包括四类组件,分别是活动(Activity)组件、服务(Service)组件、接收器(Receiver)组件和提供者(Provier)组件。
现有技术中,所有类组件都需要在主线程进行实例化和后续生命周期切换,主线程基于消息队列顺序调度机制对各类组件的消息进行调度,当某个消息处理耗时过长或者某个场景系统负载过重,就会使得后续消息不能及时被调度,当系统判断消息超时时,会显示应用无响应(Application Not Responding,ANR)对话框。因此,采用现有技术的方法,ANR出现次数较多,消息的处理效率不高。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种消息处理的方法、装置、电子设备和计算机可读存储介质。
本公开第一方面提供一种消息处理的方法,所述方法包括:
接收待处理消息;
若所述待处理消息不为目标类型的消息,将所述待处理消息发送至第一消息队列,以使第一线程对所述第一消息队列中的消息进行处理,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;
若所述待处理消息为目标类型的消息,将所述待处理消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理。
可选的,所述接收待处理消息包括:
接收第一消息,对第一消息进行第一封装处理,得到第二消息,其中,所述第二消息的头部包含第一消息队列标识和第一载体的标识;
所述将待处理消息发送至第二消息队列,包括:
对所述第二消息进行第二封装处理,得到第三消息,其中,所述第三消息的头部包括:第二消息队列标识和第二载体的标识,所述第二载体的标识与所述第一载体的标识相同;
将所述第三消息发送至所述第二消息队列。
可选的,所述将待处理消息发送至第一消息队列,包括:
将所述第二消息发送至所述第一消息队列。
可选的,所述目标类型为下述至少一种:
服务组件消息;
接收器消息;
提供者消息。
本公开第二方面提供一种消息处理的方法,所述方法包括:
接收待处理消息;
将所述待处理消息发送至第一消息队列;
从所述第一消息队列中获取目标类型的消息,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;
将所述目标类型的消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理,第一线程对所述第一消息队列中的非目标类型的消息进行处理。
可选的,所述接收待处理消息,包括:
接收第一消息,对第一消息进行第一封装处理,得到第二消息,其中,所述第二消息的头部包含第一消息队列标识和第一载体的标识;
所述将所述目标类型的消息发送至第二消息队列,包括:
对所述第二消息进行第二封装处理,得到第三消息,其中,所述第三消息的头部包括:第二消息队列标识和第二载体的标识,所述第二载体的标识与所述第一载体的标识相同;
将所述第三消息发送至所述第二消息队列。
可选的,所述从所述第一消息队列中获取目标类型的消息,包括:
查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息。
可选的,所述查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息,包括:
周期性的查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息。
可选的,所述目标类型为下述至少一种:
服务组件消息;
接收器消息;
提供者消息。
本公开第三方面提供一种消息处理的装置,所述装置包括:
处理模块,用于接收待处理消息;
代理模块,用于若所述待处理消息不为目标类型的消息,将所述待处理消息发送至第一消息队列,以使第一线程对所述第一消息队列中的消息进行处理,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;
所述处理模块还用于若所述待处理消息为目标类型的消息,将所述待处理消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理。
本公开第四方面提供一种消息处理的装置,所述装置包括:
处理模块,用于接收待处理消息;
所述处理模块还用于将所述待处理消息发送至第一消息队列;
获取模块,用于从所述第一消息队列中获取目标类型的消息,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;
所述处理模块还用于将所述目标类型的消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理,第一线程对所述第一消息队列中的非目标类型的消息进行处理。
本公开第五方面提供一种电子设备,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现第一方面所述的方法的步骤。
本公开第六方面提供一种电子设备,其特征在于,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现第二方面所述的方法的步骤。
本公开第七方面提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现第一方面所述的方法的步骤。
本公开第八方面提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现第二方面所述的方法的步骤。
本公开第九方面提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如第一方面所述的消息处理的方法。
本公开第十方面提供一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如第二方面所述的消息处理的方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:
通过设置两个消息队列和两个线程,将不为目标类型的消息发送至第一消息队列,由第一线程对第一消息队列中的消息进行处理,将目标类型的消息发送至第二消息队列,由第二线程对第二消息队列中的消息进行处理,第二线程处理目标类型的消息,消息数量较少,消息等待时间较短,处理效率较高,从而,减少了ANR现象的出现。并且由于将第一线程处理的部分消息迁移到第二线程进行处理,减少了第一线程处理的消息的数量,减少消息的等待时间,进一步地提高了消息的处理效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开提供的一种操作系统的架构示意图;
图2为本公开提供的一种消息处理的方法的流程示意图;
图3为本公开提供的第二消息的结构示意图;
图4为本公开提供的第三消息的一种结构示意图;
图5为本公开提供的另一种操作系统架构示意图;
图6为本公开提供的另一种消息处理的方法的流程示意图;
图7为本公开提供的另一种消息处理的方法的流程示意图;
图8为本公开提供的又一种消息处理的方法的流程示意图;
图9为本公开提供的又一种消息处理的方法的流程示意图;
图10为本公开提供的再一种操作系统的架构示意图;
图11为本公开提供的又一种消息处理的方法的流程示意图;
图12为本公开提供的又一种消息处理的方法的流程示意图;
图13为本公开提供的一种消息处理的装置的结构示意图;
图14为本公开提供的另一种消息处理的装置的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
在一些操作系统框架中,例如,安卓框架,包括的四类组件中,活动组件、服务组件、接收器组件和提供者组件产生的消息均可能因处理时延较长而引起ANR现象,其中,服务组件、接收器组件和提供者组件的消息可以支持异步调度。
本公开为了减少ANR现象的出现,在第一线程的基础上,扩展了第二线程,该第二线程可以实现对消息进行和第一线程同样的处理,因此,可以将支持异步调度的部分或者全部消息通过第二线程处理,从而,减少第一线程处理的消息的数量,减少消息的等待时间。第二线程只处理支持异步调度的部分或者全部消息,因此,第二线程的消息数量较少,消息等待时间较短,处理效率较高,从而,减少了ANR现象的出现。
图1为本公开提供的一种操作系统的架构示意图,如图1所述,该系统的架构包括:处理模块101、第一消息队列102、第二消息队列103、第一线程104和第二线程105,其中,第一线程104处理第一消息队列102中的消息,第二线程105处理第二消息队列103中的消息。将支持异步调度的部分或者全部消息发送到第二消息队列,将其余消息发送到第一消息队列。第一线程对第一消息队列中的消息进行处理,第二线程对第二消息队列中的消息进行处理。由于将全部由第一线程处理的消息部分由第二线程分担处理,因此,减少了消息的等待时间,提高了消息的处理效率,从而,减少了ANR现象的出现。
图2为本公开提供的一种消息处理的方法的流程示意图,如图2所示,本实施例的方法如下:
S201:接收待处理消息。
其中,待处理消息来自于Binder线程。来自于Binder线程的消息可能属于活动组件、服务组件、接收器组件和提供者组件。
其中,服务组件、接收器组件和提供者组件的消息可以支持异步调度。目标类型指支持异步调度并能引起ANR的部分或者全部消息。因此,待处理消息可能为目标类型的消息,也可能不为目标类型的消息。
目标类型包括下述至少一种:
服务组件消息;接收器消息;提供者消息。
举例来说,目标类型为:属于服务组件的消息或者接收器组件的消息,也就是如果第二消息属于这两种组件的消息,则认为第二消息为目标类型。目标类型也可以为:属于服务组件的消息、接收组件的消息或者提供者组件的消息,也就是如果第二消息属于这三种组件的消息,则认为第二消息为目标类型。目标类型也可以是开发人员根据实际应用场景确定的,例如,服务组件的消息支持异步调度并且产生ANR现象的频率比较高,则设定属于服务组件的消息为目标类型。
可选的,本步骤可以通过如下方式实现:
接收第一消息,对第一消息进行第一封装处理,得到第二消息,其中,所述第二消息的头部包含第一消息队列标识和第一载体的标识。
其中,对所述第一消息进行第一封装处理,得到第二消息。具体为,对第一消息添加第一头部,所述第一头部中包含第一消息队列标识和第一载体的标识,所述第一载体用于调用第一处理函数。第一消息队列的标识用于指示将该第二消息发送至第一消息队列;所述第一载体标识用于指示第一线程处理该第二消息时调用哪个载体,也就是调用哪个实例化对象。第二消息如图3所示,图3为本公开提供的第二消息的结构示意图。该第二消息包括第一头部和消息内容,第一头部包括第一消息队列标识和第一载体的标识,消息内容为第一消息。
S203:若待处理消息不为目标类型的消息,将待处理消息发送至第一消息队列,以使第一线程对所述第一消息队列中的消息进行处理。
若第二消息不为目标类型的消息,则直接将第二消息发送至第一消息队列。第一线程按照顺序从第一消息队列中取第二消息,并根据第二消息中的第一载体的标识,调用第一载体对第二消息进行处理。
S205:若待处理消息为目标类型的消息,将待处理消息发送至第二消息队列,以使第二线程对第二消息队列中的消息进行处理。
可选的,本步骤可以通过如下方式实现:
对第二消息进行第二封装处理,得到第三消息,将第三消息发送至第二消息队列。其中,第三消息的头部包括:第二消息队列标识和第二载体的标识,第二载体的标识与第一载体的标识相同。
具体地,对所述第二消息进行第二封装处理,得到第三消息。具体为,对第二消息添加第二头部,所述第二头部中包含第二消息队列标识和第二载体的标识。其中,第二消息队列标识用于指示将所述第三消息发送至第二消息队列。所述第二载体的标识用于指示第二线程处理该第三消息时调用哪个载体,也就是调用哪个实例化对象。其中,第二载体的标识与第一载体的标识相同,即为同一个实例化对象。第三消息如图4所示,图4为本公开提供的第三消息的一种结构示意图。该第三消息包括第二头部和消息内容,第二头部包括第二目的队列标识和第二载体的标识,消息内容为第二消息。第二线程按照顺序从第二消息队列中取第三消息,并根据第三消息中的第二载体的标识,调用第二载体第三消息进行处理。
本实施例,通过设置两个消息队列和两个线程,将不为目标类型的消息发送至第一消息队列,由第一线程对第一消息队列中的消息进行处理,将目标类型的消息发送至第二消息队列,由第二线程对第二消息队列中的消息进行处理,第二线程处理目标类型的消息,消息数量较少,消息等待时间较短,处理效率较高,从而,减少了ANR现象的出现。并且由于将第一线程处理的部分消息迁移到第二线程进行处理,减少了第一线程处理的消息的数量,减少消息的等待时间,进一步地提高了消息的处理效率。
图5为本公开提供的另一种操作系统架构示意图,图5是图1所示系统架构的一种更细的划分,如图5所示,该系统架构中包括:第一处理模块、代理模块、第二处理模块、第一消息队列、第二消息队列、第一线程、第一循环器、第二线程和第二循环器。
其中,第一处理模块为第一线程对应的处理模块(例如,Handler1实体),第二处理模块为第二线程对应的处理模块(例如,Handler2实体),第一循环器为第一线程对应的循环器(例如,Looper1),第二循环器为第二线程对应的循环器(例如,Looper2),第一消息队列为第一线程对应的消息队列,第二消息队列为第二线程对应的消息队列,代理模块用于对第一处理模块处理后的消息进行分流,将支持异步调度的部分或者全部消息通过第二处理模块发送到第二消息队列,将其余消息发送到第一消息队列。第一线程对第一消息队列中的消息进行处理,第二线程对第二消息队列中的消息进行处理。由于将全部由第一线程处理的消息部分由第二线程分担处理,因此,减少了消息的等待时间,提高了消息的处理效率,从而,减少了ANR现象的出现。
图6为本公开提供的另一种消息处理的方法的流程示意图,如图6所示,本实施例的方法应用于上述图5所示的系统架构中,本实施例的方法如下:
S601:第一处理模块对接收到的第一消息进行第一封装处理,得到第二消息。
本步骤中的第一封装处理参见S201中的具体描述,此处不再赘述。
其中,第一处理模块在第二消息的头部添加的均为第一消息队列的标识。
S602:第一处理模块向代理模块发送所述第二消息。
S603:代理模块解析所述第二消息,确定所述第二消息是否为目标类型的消息。若不为目标类型的消息执行S604,若为目标类型的消息执行S605。
本步骤中,目标类型的详细描述参见S201中的详细描述,此处不再赘述。
S604:代理模块将所述第二消息发送至第一消息队列。
S605:代理模块向第二处理模块发送所述第二消息。
S606:第二处理模块对第二消息进行第二封装处理,得到第三消息。
其中,本步骤中的第一封装处理参见S205中的具体描述,此处不再赘述。
第二处理模块在第三消息的头部添加的均为均为第二消息队列的标识。
S607:第二处理模块将所述第三消息发送至所述第二消息队列。
S608:第一线程的第一循环器从所述第一消息队列中按顺序取第二消息,所述第一线程根据所述第二消息中的第一载体的标识,调用所述第一载体对所述第二消息进行处理。
S609:第二线程的第二循环器从所述第二消息队列中按顺序取第三消息,所述第二线程根据所述第三消息中的第二载体的标识,调用所述第二载体对所述第三消息进行处理。
其中,第二线程对第三消息进行封装反序列化,获取第二载体的标识,根据第二载体的标识调用第二载体对第三消息进行处理。
其中,S608和S609的执行顺序不做限制,可以先后执行,也可以同时执行。
本实施例,通过第一处理模块对接收到的第一消息进行第一封装处理,得到第二消息,并向代理模块发送所述第二消息。代理模块解析所述第二消息,确定所述第二消息是否为目标类型的消息,若是目标类型消息,则将所述第二消息发送至第二处理模块。第二处理模块对对第二消息进行第二封装处理,得到第三消息,并将第三消息发送至所述第二消息队列,第二线程的第二循环器从所述第二消息队列中按顺序取第三消息,所述第二线程根据所述第三消息中的第二载体的标识,调用所述第二载体的标识对所述第三消息进行处理,其中,第一载体的标识和第二载体的标识相同,第一载体和第二载体调用的为同一处理函数,第二线程只处理目标类型的消息,因此,第二线程的消息数量较少,消息等待时间较短,处理效率较高,从而,减少了ANR现象的出现。进一步地,实现将第一线程处理的部分消息迁移到第二线程进行处理,减少了第一线程处理的消息的数量,减少消息的等待时间,进一步地减少了ANR现象的出现。
图7为本公开提供的另一种消息处理的方法的流程示意图,图7是在图6所示实施例的基础上,进一步地,在S601之前,还包括如下步骤:
S6001:第一线程初始化第二线程。
初始化完成之后,执行S6002。
S6002:第二线程发送占位消息阻塞第二线程异步调度。
发送占位消息阻塞第二线程异步调度的目的是为了防止第一线程还未初始化完成,第二线程进行异步调度对第一线程的调度造成影响。
S6003:第二线程接收第一线程发送的唤醒异步调度消息。第一线程第一线程第一线程。
其中,所述唤醒异步调度消息用于指示允许所述第二线程执行异步调度,第二线程接收到第一线程发送的唤醒异步调度消息之后,可以开始进行异步调度。
本实施例,通过在第二线程进行异步调度之前,第一线程初始化第二线程,第二线程发送占位消息阻塞第二线程异步调度,防止第二线程对第一线程的调度造成影响,接收第一线程发送的唤醒异步调度消息之后再进行异步调度,保证了第一线程和第二线程的正常工作。
图8为本公开提供的又一种消息处理的方法的流程示意图,图8是在图6所示实施例的基础上,进一步地,在第一线程初始化第二线程之前,还包括:
S60001:确定第一线程代理类具有访问权限。
其中,一种可能的实现方式,代理类第一线程本身具有访问权限。
另一种可能的方式:第一线程代理类本身没有访问权限,通过修改第一线程代理类的访问权限以及修改第一线程代理类的构造成函数的访问权限,使得所述第一线程代理类具有访问权限。
可选的,在修改第一线程代理类的访问权限之前还包括:在JNI层校验类的访问标识与系统本身的访问标识是否一致。若不一致则初始化失败,若一致,则修改第一线程代理类的访问权限以及修改第一线程代理类的构造成函数的访问权限,使得所述第一线程代理类具有访问权限。
可选的,在修改构造函数的访问权限之后还包括:确定构造函数是否具有访问权限,若具有,则执行S60002,若不具有,则类对象查询错误回滚JNI层修改。
S60002:生成代理模块。
所述代理模块可以代理所述第一线程。
可选的,生成代理模块之后还包括:确定代理是否成功,若成功则第二线程初始化,若失败,则初始化失败。
本实施例,通过确定第一线程代理类具有访问权限,在第一线程代理类具有访问权限的前提下生成代理模块,以实现对消息解析,并对消息进行分流处理。
图9为本公开提供的又一种消息处理的方法的流程示意图,如图9所示,本实施例的方法如下:
S901:接收待处理消息。
其中,待处理消息来自于Binder线程。来自于Binder线程的消息可能属于活动组件、服务组件、接收器组件和提供者组件。
可选的,本步骤的一种实现方式为:
接收第一消息,对第一消息进行第一封装处理,得到第二消息,其中,所述第二消息的头部包含第一消息队列标识和第一载体的标识。可以参见S201的详细描述,此处不再赘述。
S902:将所述待处理消息发送至第一消息队列。
将进行第一封装处理后的第二消息均发送至第一消息队列。
S903:从所述第一消息队列中获取目标类型的消息。
其中,目标类型为支持异步调度并能引起应用无响应的部分或者全部消息。关于目标类型的可以参见S201中的详细描述,此处不再赘述。
可选的,可以通过查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息。具体地,可以周期性的查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息。
S904:将所述目标类型的消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理,第一线程对所述第一消息队列中的非目标类型的消息进行处理。
可选的,对目标类型的第二消息进行第二封装处理,得到第三消息,其中,所述第三消息的头部包括:第二消息队列标识和第二载体的标识,所述第二载体的标识与所述第一载体的标识相同;将所述第三消息发送至所述第二消息队列。对目标类型的第二消息进行第二封装处理,得到第三消息的过程可以参见S205的详细描述,此处不再赘述。
本实施例,通过接收待处理消息,将所述待处理消息发送至第一消息队列,从所述第一消息队列中获取目标类型的消息,将所述目标类型的消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理,第一线程对所述第一消息队列中的非目标类型的消息进行处理。即通过将目标类型的消息从第一线程对应的第一消息队列转移到第二线程对应的第二消息队列,第二线程对目标类型的消息进行处理,第二线程只处理目标类型的消息,因此,第二线程的消息数量较少,消息等待时间较短,处理效率较高,从而,减少了ANR现象的出现。进一步地,实现将第一线程处理的部分消息迁移到第二线程进行处理,减少了第一线程处理的消息的数量,减少消息的等待时间,进一步地减少了ANR现象的出现。
图10为本公开提供的再一种操作系统的架构示意图,如图10所示,该系统架构包括:第一线程、第一处理模块、第一循环器、第一消息队列、查询线程、第二线程、第二处理模块和第二循环器。
其中,第一处理模块为第一线程对应的处理模块(例如,Handler1实体),第二处理模块为第二线程对应的处理模块(例如,Handler2实体),第一循环器为第一线程对应的循环器(例如,Looper1),第二循环器为第二线程对应的循环器(例如,Looper2),第一消息队列为第一线程对应的消息队列,第二消息队列为第二线程对应的消息队列,查询线程用于第一消息队列,将支持异步调度的部分或者全部消息通过第二处理模块发送到第二消息队列。第一线程对第一消息队列中的消息进行处理,第二线程对第二消息队列中的消息进行处理。由于将全部由第一线程处理的消息部分由第二线程分担处理,因此,减少了消息的等待时间,提高了消息的处理效率,从而,减少了ANR现象的出现。
图11为本公开提供的又一种消息处理的方法的流程示意图,如图11所示,本实施例的方法应用于上述图10所示的系统架构中,本实施例的方法如下:
S1101:第一处理模块对接收到的第一消息进行第一封装处理,得到第二消息。
其中,所述第二消息包含第一载体的标识。
本步骤可以参见S901的详细描述,此处不再赘述。
S1102:第一处理模块将所述第二消息发送至所述第一消息队列。
S1103:查询线程查询第一消息队列,获取第一消息队列中的目标类型的消息。
可选的,一种实现方式为:查询线程周期性的查询第一消息队列。
具体的查询周期可以根据实际应用场景确定。
S1104:查询线程向所述第二处理模块发送所述目标类型的消息。
S1105:第二处理模块对所述目标类型的消息进行第二封装处理,得到第三消息。
其中,第三消息包含第二载体的标识,所述第二载体的标识与所述第一载体的标识相同。
本步骤的详细描述参见S904,此处不再赘述。
S1106:第二处理模块将所述第三消息发送至所述第二消息队列。
S1107:第二循环器从所述第二消息队列中按顺序取第三消息。
S1108:第二线程根据所述第二载体的标识,调用所述第二载体对所述第三消息进行处理。
其中,第二线程对第三消息进行封装反序列化,获取第二载体的标识,根据第二载体的标识调用第二载体对第三消息进行处理。
本实施例,通过第一处理模块对接收到的第一消息进行第一封装处理,得到第二消息,并将所述第二消息发送至所述第一消息队列。查询线程查询第一消息队列,获取第一消息队列中的目标类型的消息,并向所述第二处理模块发送所述目标类型的消息。第二处理模块对所述目标类型的消息进行第二封装处理,得到第三消息,并将所述第三消息发送至所述第二消息队列。第二循环器从所述第二消息队列中按顺序取第三消息。第二线程根据所述第二载体的标识,调用所述第二载体对所述第三消息进行处理。即通过设置查询线程查询第一线程的第一消息队列,将目标类型的消息转移到第二线程对应的第二消息队列,第二线程对目标类型的消息进行处理,第二线程只处理目标类型的消息,因此,第二线程的消息数量较少,消息等待时间较短,处理效率较高,从而,减少了ANR现象的出现。进一步地,实现将第一线程处理的部分消息迁移到第二线程进行处理,减少了第一线程处理的消息的数量,减少消息的等待时间,进一步地减少了ANR现象的出现。
在上述的基础上,第一循环器从所述第一消息队列中按顺序取第二消息。第一线程根据所述第二载体的标识,调用所述第二载体对所述第三消息进行处理。
图12为本公开提供的又一种消息处理的方法的流程示意图,图12是在图11所示实施例的基础上,进一步地,在S1101之前,还包括如下步骤:
S11001:第一线程初始化第二线程。
初始化完成之后,执行S11002。
S11002:第二线程发送占位消息阻塞第二线程异步调度。
发送占位消息阻塞第二线程异步调度的目的是为了防止第一线程还未初始化完成,第二线程进行异步调度对第一线程的调度造成影响。
S11003:第二线程接收第一线程发送的唤醒异步调度消息。
其中,所述唤醒异步调度消息用于指示允许所述第二线程执行异步调度,第二线程接收到第一线程发送的唤醒异步调度消息之后,可以开始进行异步调度。
本实施例,通过在第二线程进行异步调度之前,第一线程初始化第二线程,第二线程发送占位消息阻塞第二线程异步调度,防止第二线程对第一线程的调度造成影响,接收第一线程发送的唤醒异步调度消息之后再进行异步调度,保证了第一线程和第二线程的正常工作。
图13为本公开提供的一种消息处理的装置的结构示意图,本实施例的装置包括:处理模块1301和代理模块1302;
其中,处理模块1301用于接收待处理消息;代理模块1302用于若所述待处理消息不为目标类型的消息,将所述待处理消息发送至第一消息队列,以使第一线程对所述第一消息队列中的消息进行处理,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;处理模块1301还用于若所述待处理消息为目标类型的消息,将所述待处理消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理。
可选的,所述处理模块具体用于接收第一消息,对第一消息进行第一封装处理,得到第二消息,其中,所述第二消息的头部包含第一消息队列标识和第一载体的标识;
所述处理模块1301具体用于对所述第二消息进行第二封装处理,得到第三消息,其中,所述第三消息的头部包括:第二消息队列标识和第二载体的标识,所述第二载体的标识与所述第一载体的标识相同;将所述第三消息发送至所述第二消息队列。
可选的,所述代理模块1302具体用于将所述第二消息发送至所述第一消息队列。
可选的,所述目标类型为下述至少一种:
服务组件消息;
接收器消息;
提供者消息。
本实施例的装置对应的可用于执行图2至图8所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图14为本公开提供的另一种消息处理的装置的结构示意图,如图14所示,本实施例的装置包括:
处理模块1401用于接收待处理消息;所述处理模块1401还用于将所述待处理消息发送至第一消息队列;获取模块1402用于从所述第一消息队列中获取目标类型的消息,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;所述处理模块1401还用于将所述目标类型的消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理,第一线程对所述第一消息队列中的非目标类型的消息进行处理。
可选的,处理模块1401具体用于接收第一消息,对第一消息进行第一封装处理,得到第二消息,其中,所述第二消息的头部包含第一消息队列标识和第一载体的标识;
处理模块1401具体用于对所述第二消息进行第二封装处理,得到第三消息,其中,所述第三消息的头部包括:第二消息队列标识和第二载体的标识,所述第二载体的标识与所述第一载体的标识相同;将所述第三消息发送至所述第二消息队列。
可选的,所述获取模块1402具体用于查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息。
可选的,所述获取模块1402具体周期性的查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息。
可选的,所述目标类型为下述至少一种:
服务组件消息;
接收器消息;
提供者消息。
本实施例的装置对应的可用于执行图9至图12所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本公开还提供一种电子设备,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现图2至图8任一项所述的方法的步骤。
本公开还提供另一种电子设备,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现图9至图12任一项所述的方法的步骤。
本公开还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现图2至图8任一项所述的方法的步骤。
本公开还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现图9至图12任一项所述的方法的步骤。
本公开第九方面提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行图2至图8任一项所述的方法的步骤。
本公开第十方面提供一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行图9至图12任一项所述的方法的步骤。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (17)
1.一种消息处理的方法,其特征在于,所述方法包括:
接收待处理消息;
若所述待处理消息不为目标类型的消息,将所述待处理消息发送至第一消息队列,以使第一线程对所述第一消息队列中的消息进行处理,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;
若所述待处理消息为目标类型的消息,将所述待处理消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理。
2.根据权利要求1所述的方法,其特征在于,所述接收待处理消息包括:
接收第一消息,对第一消息进行第一封装处理,得到第二消息,其中,所述第二消息的头部包含第一消息队列标识和第一载体的标识;
所述将所述待处理消息发送至第二消息队列,包括:
对所述第二消息进行第二封装处理,得到第三消息,其中,所述第三消息的头部包括:第二消息队列标识和第二载体的标识,所述第二载体的标识与所述第一载体的标识相同;
将所述第三消息发送至所述第二消息队列。
3.根据权利要求2所述的方法,其特征在于,所述将所述待处理消息发送至第一消息队列,包括:
将所述第二消息发送至所述第一消息队列。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述目标类型为下述至少一种:
服务组件消息;
接收器消息;
提供者消息。
5.一种消息处理的方法,其特征在于,所述方法包括:
接收待处理消息;
将所述待处理消息发送至第一消息队列;
从所述第一消息队列中获取目标类型的消息,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;
将所述目标类型的消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理,第一线程对所述第一消息队列中的非目标类型的消息进行处理。
6.根据权利要求5所述的方法,其特征在于,所述接收待处理消息,包括:
接收第一消息,对第一消息进行第一封装处理,得到第二消息,其中,所述第二消息的头部包含第一消息队列标识和第一载体的标识;
所述将所述目标类型的消息发送至第二消息队列,包括:
对所述第二消息进行第二封装处理,得到第三消息,其中,所述第三消息的头部包括:第二消息队列标识和第二载体的标识,所述第二载体的标识与所述第一载体的标识相同;
将所述第三消息发送至所述第二消息队列。
7.根据权利要求5所述的方法,其特征在于,所述从所述第一消息队列中获取目标类型的消息,包括:
查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息。
8.根据权利要求7所述的方法,其特征在于,所述查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息,包括:
周期性的查询所述第一消息队列,获取所述第一消息队列中的目标类型的消息。
9.根据权利要求5-8任一项所述的方法,其特征在于,所述目标类型为下述至少一种:
服务组件消息;
接收器消息;
提供者消息。
10.一种消息处理的装置,其特征在于,所述装置包括:
处理模块,用于接收待处理消息;
代理模块,用于若所述待处理消息不为目标类型的消息,将所述待处理消息发送至第一消息队列,以使第一线程对所述第一消息队列中的消息进行处理,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;
所述处理模块还用于若所述待处理消息为目标类型的消息,将所述待处理消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理。
11.一种消息处理的装置,其特征在于,所述装置包括:
处理模块,用于接收待处理消息;
所述处理模块还用于将所述待处理消息发送至第一消息队列;
获取模块,用于从所述第一消息队列中获取目标类型的消息,所述目标类型为支持异步调度并能引起应用无响应的部分或者全部消息;
所述处理模块还用于将所述目标类型的消息发送至第二消息队列,以使第二线程对所述第二消息队列中的消息进行处理,第一线程对所述第一消息队列中的非目标类型的消息进行处理。
12.一种电子设备,其特征在于,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一项所述的方法的步骤。
13.一种电子设备,其特征在于,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现权利要求5-9任一项所述的方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-4任一项所述的方法的步骤。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求5-9任一项所述的方法的步骤。
16.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如权利要求1-4任一项所述的消息处理的方法。
17.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如权利要求5-9任一项所述的消息处理的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110526717.XA CN113515391A (zh) | 2021-05-14 | 2021-05-14 | 消息处理的方法、装置、电子设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110526717.XA CN113515391A (zh) | 2021-05-14 | 2021-05-14 | 消息处理的方法、装置、电子设备和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113515391A true CN113515391A (zh) | 2021-10-19 |
Family
ID=78064383
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110526717.XA Pending CN113515391A (zh) | 2021-05-14 | 2021-05-14 | 消息处理的方法、装置、电子设备和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113515391A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107370667A (zh) * | 2017-07-31 | 2017-11-21 | 北京北信源软件股份有限公司 | 多线程并行处理方法和装置、可读介质和存储控制器 |
CN108121608A (zh) * | 2016-11-29 | 2018-06-05 | 杭州华为数字技术有限公司 | 一种队列调度方法以及节点设备 |
CN108965587A (zh) * | 2018-06-26 | 2018-12-07 | 恒生电子股份有限公司 | 一种消息提醒方法、装置以及设备 |
CN111585867A (zh) * | 2020-03-31 | 2020-08-25 | 北京奇艺世纪科技有限公司 | 消息处理方法、装置、电子设备及可读存储介质 |
WO2020238365A1 (zh) * | 2019-05-31 | 2020-12-03 | 深圳前海微众银行股份有限公司 | 消息消费方法、装置、设备及计算机存储介质 |
CN112596920A (zh) * | 2020-12-15 | 2021-04-02 | 中国建设银行股份有限公司 | 一种消息处理的方法、装置、电子设备和存储介质 |
-
2021
- 2021-05-14 CN CN202110526717.XA patent/CN113515391A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121608A (zh) * | 2016-11-29 | 2018-06-05 | 杭州华为数字技术有限公司 | 一种队列调度方法以及节点设备 |
CN107370667A (zh) * | 2017-07-31 | 2017-11-21 | 北京北信源软件股份有限公司 | 多线程并行处理方法和装置、可读介质和存储控制器 |
CN108965587A (zh) * | 2018-06-26 | 2018-12-07 | 恒生电子股份有限公司 | 一种消息提醒方法、装置以及设备 |
WO2020238365A1 (zh) * | 2019-05-31 | 2020-12-03 | 深圳前海微众银行股份有限公司 | 消息消费方法、装置、设备及计算机存储介质 |
CN111585867A (zh) * | 2020-03-31 | 2020-08-25 | 北京奇艺世纪科技有限公司 | 消息处理方法、装置、电子设备及可读存储介质 |
CN112596920A (zh) * | 2020-12-15 | 2021-04-02 | 中国建设银行股份有限公司 | 一种消息处理的方法、装置、电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107729139B (zh) | 一种并发获取资源的方法和装置 | |
CN111274019B (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN106375458B (zh) | 服务调用系统、方法及装置 | |
CN101197812B (zh) | 一种实现页面调用的系统及方法 | |
CN111949364A (zh) | 容器化vnf的部署方法和相关设备 | |
CN107402956B (zh) | 大任务的数据处理方法、设备和计算机可读存储介质 | |
CN111221630B (zh) | 业务流程处理方法、装置、设备、可读存储介质及系统 | |
EP3837604A1 (en) | In situ triggered function as a service within a service mesh | |
CN106598751B (zh) | 通过事件总线分发事件的方法及系统 | |
CN111258723B (zh) | 分布式系统的事务处理方法、装置、系统、介质及设备 | |
CN115174472B (zh) | 一种消息转发处理方法及相关装置 | |
CN111221618A (zh) | 一种容器化虚拟网络功能的部署方法和装置 | |
CN112596931B (zh) | 一种跨进程通信方法、装置、电子设备及存储介质 | |
CN111338769B (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN111314397B (zh) | 一种基于Swoole框架和Yaf框架的消息处理方法和装置 | |
US10764724B2 (en) | Method and apparatus for implementing member resource processing | |
CN112019452B (zh) | 一种业务需求的处理方法、系统及相关装置 | |
CN107819855B (zh) | 一种消息分发方法及装置 | |
CN114710549A (zh) | 一种容器平台中网卡的动态管理方法、系统及业务节点 | |
CN111310638B (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN113515391A (zh) | 消息处理的方法、装置、电子设备和计算机可读存储介质 | |
CN116680209A (zh) | 基于wasm的多智能合约实例管理方法 | |
CN115934292A (zh) | 微服务应用的调用方法、装置及设备 | |
CN111857941B (zh) | 一种安全策略管理方法及装置 | |
CN114003360A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20211019 |
|
RJ01 | Rejection of invention patent application after publication |