本发明实施例涉及计算机技术,尤其涉及一种广播队列调整方法、装置和终端设备。
背景技术:
广播是一种被广泛运用的在应用程序之间进行信息传输的机制,以安卓操作系统为例,其通过广播(Broadcast)来实现应用程序间数据的传输和共享。典型的,如安卓自带的短信、电话等广播。
在安卓系统中,广播发送者通过调用sendBroadcast函数进行广播消息的发送,广播接收者通过调用registerReceiver函数在管理模块中进行广播接收器(BroadcastReceiver)的注册,并定义自身感兴趣的广播消息,由此来实现对相应的广播消息的接收。
现有技术中,广播的处理机制存在缺陷,使得广播处理效率低下,系统资源消耗过多且稳定性差。
技术实现要素:
本发明提供了一种广播队列调整方法、装置和终端设备,提高了广播处理效率,降低了系统资源消耗,增加了系统的稳定性。
第一方面,本发明实施例提供了一种广播队列调整方法,包括:
监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列;
依次遍历所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程;
将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列。
第二方面,本发明实施例还提供了一种广播队列调整装置,包括:
获取模块,用于监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列;
遍历模块,用于依次遍历所述广播队列中的每个待发送的广播消息;
确定模块,用于确定所述每个待发送的广播消息的发送进程;
调整模块,用于将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列。
第三方面,本发明实施例还提供了一种终端设备,包括:处理器、存储器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列;
依次遍历所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程;
将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列。
本发明实施例提供的技术方案,解决了现有的广播机制存在的缺陷,提高了广播处理效率,降低了系统资源消耗,使得系统稳定性增加。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明实施例提供的一种广播队列调整方法的流程图;
图2是本发明实施例提供的另一种广播队列调整方法的流程图;
图3是本发明实施例提供的另一种广播队列调整方法的流程图;
图4是本发明实施例提供的一种广播队列调整装置的结构框图;
图5是本发明实施例提供的一种终端设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
图1是本发明实施例提供的一种广播队列调整方法的流程图,本实施例可适用于广播发送过程中,对广播队列进行调整的过程,该方法可以由本发明实施例提供的终端设备来执行,该终端设备的广播队列调整装置可采用软件和/或硬件的方式实现,如图1所示,本实施例提供的具体方案如下:
S101、监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列。
在广播处理过程中,广播发送者的服务进程通过调用广播发送函数(如sendBroadcast函数)将广播消息发送至管理模块(如ActivityManagerService,活动管理服务),管理模块接收到该广播消息后将其放入广播发送队列,管理模块通过进程通信机制(如Binder进程通信机制)将广播发送队列中的广播消息发送至符合接收条件的广播接收者。
广播机制中,广播消息指的是系统或者应用程序在运行过程中发送的,用于系统和/或应用程序之间传输的信息,示例性的,广播消息可以是系统启动广播消息、短信类广播消息、电话类广播消息或者三方应用类广播消息等。
在一个实施例中,以计数器应用程序作为广播发送者为例,其发送广播消息至管理模块的方式可采用如下表示:
//创建一个广播消息
Intent intent=new Intent(BROADCAST_COUNTER_ACTION);
//传递计数器参数及对应的计数值
intent.putExtra(COUNTER_VALUE,counter);
//发送广播消息
sendBroadcast(intent)
在一个实施例中,管理模块接收广播发送者发送的广播消息后形成广播队列,对广播发送队列中的广播消息依次进行发送。广播发送者发送广播消息的过程和广播接收者接收广播消息的过程是异步操作过程,广播发送者和广播接收者通过管理模块实现低耦合的关系匹配。其中,根据广播发送方式的不同可将广播消息分为普通广播消息和有序广播消息。普通广播消息被管理模块发出后,广播接收者对该广播消息的接收是无序的,而有序广播消息被管理模块发出后,广播接收者按照顺序先后依次接收,即第一个广播接收者接收到广播消息并处理完毕后,第二个广播接收者才能开始接收并处理该广播消息,依次类推,本实施例公开的广播队列调整方法可限定在有序广播方式中。
在一个实施例中,当监测到广播消息的发送指令后,获取所述广播消息发送指令对应的广播队列。其中,该广播消息为管理模块中维护的广播队列中的广播消息,当广播消息发送时,获取该广播消息所在的广播队列。示例性的,可依据该广播消息的名称(如BROADCAST_COUNTER_ACTION)进行广播队列查找,确定包含该广播消息名称的队列为对应的广播队列。
S102、依次遍历所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程。
在一个实施例中,对广播队列中当前待发送的广播消息进行遍历,并确定该广播消息对应的发送进程。进程指系统中的程序关于某数据集合上的运行活动,是系统进行资源分配和调度的基本单位,是系统结构的组成基础,为应用程序的基本执行实体。示例性的,该发送进程可以是广播发送者发送广播消息时的进程,还可以是管理模块发送该广播消息至广播接收者并进行处理时占用的进程。
在一个实施例中,确定所述每个待发送的广播消息的发送进程的过程可以是依据广播消息的名称(如BROADCAST_COUNTER_ACTION)确定对应的执行该广播消息的进程ID号。
S103、将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列。
在一个实施例中,依据发送进程组成新的广播队列包括:将发送进程一致的广播消息组成新的广播队列。示例性的,可以依据进程ID号,将广播消息发送进程对应的进程ID不相同的广播消息移除出广播队列,再依据进程ID划分广播队列,每个新组成的广播队列中的广播消息的发送进程保持一致。
在一个实施例中,在所述将发送进程一致的广播消息组成新的广播队列之后,还包括:同时开始发送所述广播消息发送指令对应的广播队列中的广播消息和所述新的广播队列中的广播消息。该实施例中,原有广播队列和新建广播队列中的广播消息的发送进程不同,通过同时发送不同发送进程的广播消息实现了有序广播队列中广播消息的并行发送,使得广播接收者可以同时进行广播消息的处理。
在一个实施例中,广播接收者接收广播消息的注册过程可表示为(以接收计数器发送的广播消息为例):
//定义一个感兴趣的广播消息(订阅广播消息)
IntentFilter counterActionFilter=
new IntentFilter(CounterService.BROADCAST_COUNTER_ACTION);
//进行广播接收器的注册
registerReceiver(counterActionReceiver,counterActionFilter)
当该广播发送者发送的广播消息(BROADCAST_COUNTER_ACTION)由管理模块发出后,由于广播接收者注册了对应的接收该广播消息的广播接收器,该广播消息即会被对应的广播接收者接收、处理。
本实施例提供的技术方案,监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列,依次遍历所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程,将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列,解决了现有的有序广播发送队列中,需要等待已发送的广播消息处理完毕才能执行下一广播消息发送带来的广播处理效率低下的问题,将不同发送进程的广播消息分别创建在各自的广播队列中并行发送,极大的缩短了广播队列的处理时间。
图2是本发明实施例提供的另一种广播队列调整方法的流程图,在上述实施例的基础上,可选的,所述依次遍历所述广播队列中的每个待发送的广播消息包括:依次遍历预设长度下的所述广播队列中的每个待发送的广播消息。
基于上述优化,如图2所示,本实施例提供的技术方案具体如下:
S201、监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列。
S202、依次遍历预设长度下的所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程。
在一个实施例中,广播队列中可能包含很多广播消息,遍历确认广播消息对应的发送进程的过程中,广播队列排序考前的广播消息可能已经被发送且处理完毕,为提高遍历效率以及广播消息发送进程比对的准确性,采取遍历预设长度下的广播队列中的待发送广播消息,该预设长度可以是100、200或500等。其中,该预设长度可采用预设的默认值,还可以是根据系统的负载(CPU占用率、内存占用率)以及当前剩余电量来综合确定并实时动态调整。当系统负载较高(如CPU占用率大于80%,内存占用率大于80%)且剩余电量较低(小于20%)时,将该遍历的广播队列的预设长度进行减小(如设置为100),反之,则增大该预设长度的设置值(如500)。
S203、将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列。
在一个实施例中,监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列,依次遍历预设长度下的所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程,将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列,提高了比对广播消息发送进程是否一致的准确性,同时降低了系统的资源消耗,进一步优化了广播处理机制。
图3是本发明实施例提供的另一种广播队列调整方法的流程图,在上述实施例的基础上,可选的,在所述依据发送进程组成新的广播队列之后,还包括:确定发送新增的广播消息的发送进程,如果存在和所述新增的广播消息的发送进程一致的广播队列,则将所述新增的广播消息添加至发送进程一致的广播队列中;如果不存在和所述新增的广播消息的发送进程一致的广播队列,则创建新的广播队列,并将所述新增的广播消息添加至新创建的广播队列中。
基于上述优化,如图3所示,本实施例提供的技术方案具体如下:
S301、监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列。
S302、依次遍历所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程。
S303、将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列,确定发送新增的广播消息的发送进程。
S304、判断是否存在和所述新增的广播消息的发送进程一致的广播队列,如果是,则执行S305,否则执行S306。
在一个实施例中,当广播发送者发送广播消息至管理模块时,对新增的广播消息的发送进行进程确定,如果现有的广播队列存在和该广播消息发送进程一致的广播消息,则将该广播消息添加至对应的广播队列中,如果不存在则创建新的广播队列,并将所述新增的广播消息添加至新创建的广播队列中。
S305、将所述新增的广播消息添加至发送进程一致的广播队列中。
在一个实施例中,可将该新增的广播消息添加至发送进程一致的广播队列的队尾。
S306、创建新的广播队列,并将所述新增的广播消息添加至新创建的广播队列中。
在一个实施例中,当S304判断得到不存在和该新增的广播消息的发送进程一致的广播队列时,创建新的广播队列。由此,在广播消息发送时,可同时发送不同广播队列中的广播消息,实现广播消息的并发处理。
本实施例提供了一种广播队列调整方法,监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列,依次遍历所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程,将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列,当有新增的广播消息时,确定发送新增的广播消息的发送进程,如果存在和所述新增的广播消息的发送进程一致的广播队列,则将所述新增的广播消息添加至发送进程一致的广播队列中,如果不存在和所述新增的广播消息的发送进程一致的广播队列,则创建新的广播队列,并将所述新增的广播消息添加至新创建的广播队列中,使得在广播消息入队时完成广播队列的调整,相同发送进程的广播消息在同一个发送队列中,进而可实现广播消息的并行发送,进一步提高了广播处理效率。
图4是本发明实施例提供的一种广播发送装置的结构框图,该装置用于执行上述实施例提供的广播队列调整方法,具备执行方法相应的功能模块和有益效果。如图4所示,该装置具体包括:获取模块401、遍历模块402、确定模块403和调整模块404。
其中,获取模块401用于监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列;
遍历模块402用于依次遍历所述广播队列中的每个待发送的广播消息;
确定模块403用于确定所述每个待发送的广播消息的发送进程;
调整模块404用于将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列。
本实施例提供的技术方案,解决了现有的广播机制存在的缺陷,提高了广播处理效率,降低了系统资源消耗,使得系统稳定性增加。
可选的,所述调整模块404具体用于:将发送进程一致的广播消息组成新的广播队列。
可选的,还包括:发送模块405,用于在所述将发送进程一致的广播消息组成新的广播队列之后,同时开始发送所述广播消息发送指令对应的广播队列中的广播消息和所述新的广播队列中的广播消息。
可选的,所述遍历模块402具体用于:依次遍历预设长度下的所述广播队列中的每个待发送的广播消息。
可选的,所述调整模块404还用于:在所述依据发送进程组成新的广播队列之后,确定发送新增的广播消息的发送进程,如果存在和所述新增的广播消息的发送进程一致的广播队列,则将所述新增的广播消息添加至发送进程一致的广播队列中;如果不存在和所述新增的广播消息的发送进程一致的广播队列,则创建新的广播队列,并将所述新增的广播消息添加至新创建的广播队列中。
本实施例在上述各实施例的基础上提供了一种终端设备,该终端设备可以包括本发明提供的广播队列调整装置。图5是本发明实施例提供的一种终端设备的结构示意图,如图5所示,该终端设备可以包括:存储器501、中央处理器(Central Processing Unit,CPU)502、外设接口503、RF(Radio Frequency,射频)电路505、音频电路506、扬声器511、电源管理芯片508、输入/输出(I/O)子系统509、触摸屏512、其他输入/控制设备510以及外部端口504,这些部件通过一个或多个通信总线或信号线507来通信。
应该理解的是,图示终端设备500仅仅是终端设备的一个范例,并且终端设备500可以具有比图中所示出的更多的或者更少的部件,可以组合两个或更多的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
下面就本实施例提供的用于多开应用的权限管理的终端设备进行详细的描述,该终端设备以智能手机为例。
存储器501,所述存储器501可以被CPU502、外设接口503等访问,所述存储器501可以包括高速随机存取存储器,还可以包括非易失性存储器,例如一个或多个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
外设接口503,所述外设接口503可以将设备的输入和输出外设连接到CPU502和存储器501。
I/O子系统509,所述I/O子系统509可以将设备上的输入输出外设,例如触摸屏512和其他输入/控制设备510,连接到外设接口503。I/O子系统509可以包括显示控制器5091和用于控制其他输入/控制设备510的一个或多个输入控制器5092。其中,一个或多个输入控制器5092从其他输入/控制设备510接收电信号或者向其他输入/控制设备510发送电信号,其他输入/控制设备510可以包括物理按钮(按压按钮、摇臂按钮等)、拨号盘、滑动开关、操纵杆、点击滚轮。值得说明的是,输入控制器5092可以与以下任一个连接:键盘、红外端口、USB接口以及诸如鼠标的指示设备。
触摸屏512,所述触摸屏512是用户终端与用户之间的输入接口和输出接口,将可视输出显示给用户,可视输出可以包括图形、文本、图标、视频等。
I/O子系统509中的显示控制器5091从触摸屏512接收电信号或者向触摸屏512发送电信号。触摸屏512检测触摸屏上的接触,显示控制器5091将检测到的接触转换为与显示在触摸屏512上的用户界面对象的交互,即实现人机交互,显示在触摸屏512上的用户界面对象可以是运行游戏的图标、联网到相应网络的图标等。值得说明的是,设备还可以包括光鼠,光鼠是不显示可视输出的触摸敏感表面,或者是由触摸屏形成的触摸敏感表面的延伸。
RF电路505,主要用于建立手机与无线网络(即网络侧)的通信,实现手机与无线网络的数据接收和发送。例如收发短信息、电子邮件等。具体地,RF电路505接收并发送RF信号,RF信号也称为电磁信号,RF电路505将电信号转换为电磁信号或将电磁信号转换为电信号,并且通过该电磁信号与通信网络以及其他设备进行通信。RF电路505可以包括用于执行这些功能的已知电路,其包括但不限于天线系统、RF收发机、一个或多个放大器、调谐器、一个或多个振荡器、数字信号处理器、CODEC(COder-DECoder,编译码器)芯片组、用户标识模块(Subscriber Identity Module,SIM)等等。
音频电路506,主要用于从外设接口503接收音频数据,将该音频数据转换为电信号,并且将该电信号发送给扬声器511。
扬声器511,用于将手机通过RF电路505从无线网络接收的语音信号,还原为声音并向用户播放该声音。
电源管理芯片508,用于为CPU502、I/O子系统及外设接口所连接的硬件进行供电及电源管理。
本发明实施例提供的CPU502可执行如下操作:
监测到广播消息发送指令后,获取所述广播消息发送指令对应的广播队列;
依次遍历所述广播队列中的每个待发送的广播消息,确定所述每个待发送的广播消息的发送进程;
将发送进程不相同的广播消息移除出所述广播队列,并依据发送进程组成新的广播队列。
可选的,所述依据发送进程组成新的广播队列包括:将发送进程一致的广播消息组成新的广播队列。
可选的,在所述将发送进程一致的广播消息组成新的广播队列之后,还包括:同时开始发送所述广播消息发送指令对应的广播队列中的广播消息和所述新的广播队列中的广播消息。
可选的,所述依次遍历所述广播队列中的每个待发送的广播消息包括:依次遍历预设长度下的所述广播队列中的每个待发送的广播消息。
可选的,在所述依据发送进程组成新的广播队列之后,还包括:确定发送新增的广播消息的发送进程,如果存在和所述新增的广播消息的发送进程一致的广播队列,则将所述新增的广播消息添加至发送进程一致的广播队列中;如果不存在和所述新增的广播消息的发送进程一致的广播队列,则创建新的广播队列,并将所述新增的广播消息添加至新创建的广播队列中。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。