针对应用卡顿的处理方法、装置和电子设备制造方法及图纸

技术编号:24995322 阅读:37 留言:0更新日期:2020-07-24 17:58
本申请实施例提供一种针对应用卡顿的处理方法、装置和电子设备。方法包括:判断应用主线程的事件处理队列中的新加入事件是否需要被优先响应;当所述新加入事件需要被优先响应时,判断所述新加入事件在所述事件处理队列中的等待时间是否超过预设时间阈值;当超过时,收回所述应用主线程的代码执行权;重新排列所述事件处理队列,包括,将所述新加入事件排在重排后的事件处理队列的第一位;恢复所述应用主线程的代码执行权,令所述应用主线程执行重排后的事件处理队列。根据本申请一实施例的方法,通过重排应用主线程的事件处理队列,优先执行需要优先响应的事件,避免由于事件处理时间过长而导致用户产生等待感,从而大大提高了用户体验。

【技术实现步骤摘要】
针对应用卡顿的处理方法、装置和电子设备
本申请涉及智能终端
,特别涉及一种针对应用卡顿的处理方法、装置和电子设备。
技术介绍
在计算机应用场景中,为了使用计算机硬件设备实现各种不同的应用功能,技术人员开发了众多具备各种应用功能的应用软件。随着计算机硬件技术的不断发展,计算机终端在人类的日常生产生活中的应用范围不断扩大,应用软件的种类也不断增长。在实际应用场景中,在硬件设备上安装有操作系统(例如,安卓(Android)系统),在操作系统中加载有应用软件,应用软件运行在操作系统的系统框架下。由于计算机硬件处理性能不足、和/或计算机硬件错误、和/或系统框架设计缺陷、和/或软件设计缺陷、和/或输入数据错误等因素的存在,在使用应用软件的过程中,会出现应用软件运行卡顿的情况(例如,应用无响应(ApplicationNotResponding,ANR)),大大影响了用户使用应用软件的用户体验。
技术实现思路
本申请提供了一种针对应用卡顿的处理方法、装置和电子设备,本申请还提供一种计算机可读存储介质,以提供一种在应用软件外部的数据处理方式,降低应用卡顿对用户造成的操作影响,提高应用软件使用的用户体验。本申请实施例采用下述技术方案:第一方面,本申请提供了一种针对应用卡顿的处理方法,包括:监控应用主线程的事件处理队列,判断事件处理队列中的新加入事件是否需要被优先响应;具体的,需要被优先响应的事件包括但不限于会向用户反馈信息的事件;例如,在根据本申请一实施例的应用场景中,将响应被迟滞后会导致用户产生等待感的事件均定义为需要优先响应;例如,会向用户反馈信息的预定时处理事件和/或周期处理事件;当新加入事件需要被优先响应时,计算新加入事件在事件处理队列中的等待时间,判断等待时间是否超过预设时间阈值;预设时间阈值的大小可以在具体实现时根据装置性能和/实现需求等自行设定,本实施例对预设时间阈值的大小不作限定,举例来说,根据用户的感知习惯设置预设时间阈值,以用户不会明显有等待感的事件长度为预设时间阈值,例如,将预设时间阈值设定为1秒;当等待时间超过预设时间阈值时,收回应用主线程的代码执行权;在应用主线程的代码执行权被收回后,重新排列事件处理队列,包括:前移新加入事件的排位,,将新加入事件排在重排后的事件处理队列的第一位;移除阻塞事件或后移阻塞事件的排位,其中,阻塞事件为事件处理队列被重排前,排在第一位且被主线程执行的事件;即,相较于重排前的事件处理队列,在重排后的事件处理队列中,阻塞事件被移除或阻塞事件的排位被后移;在重新排列事件处理队列的过程中,对阻塞事件是采用排位后移方案还是移除方案,是由具体实现时根据装置性能和/实现需求等决定的;本实施例对重新排列事件处理队列的过程中针对阻塞事件所采用的方案不做明确限定;举例来说,根据阻塞事件的具体内容来确定针对阻塞事件所采用的方案,例如,当阻塞事件为针对用户的关键信息反馈和/或阻塞事件被一个或多个后续事件依赖时,在重新排列事件处理队列的过程中后移阻塞事件的排位;当阻塞事件为独立非关键事件(例如,自动检索升级文件)时,在重新排列事件处理队列的过程中移除阻塞事件,待后续重置阻塞事件的输入参数后再重新发起阻塞事件;在事件处理队列被重排完毕后,恢复应用主线程的代码执行权,令应用主线程执行重排后的事件处理队列。根据上述第一方面的方法流程,当新加入应用主线程的事件处理队列的事件为需要被优先响应(例如,会向用户反馈信息的事件(消息))时,在当前处理的事件(消息)对新加入的事件产生可被感知的迟滞之前就进行事件处理顺序调整,暂停当前事件的处理,优先处理新加入的事件,从而尽可能的确保及时的向用户反馈信息,这样,会使得用户感觉应用始终在正常运行,使得用户感觉应用对用户的信息回馈并没有受到任何干扰,从而避免用户产生等待感,进而提高用户体验。根据本申请一实施例的方法,通过重排应用主线程的事件处理队列,优先执行需要优先响应的事件,避免由于事件处理时间过长而导致用户产生等待感,从而大大提高了用户体验。一种可能的实现方式中,判断事件处理队列中的新加入事件是否需要被优先响应,包括:判断新加入事件是否为用户输入事件;当新加入事件为用户输入事件时,判定新加入事件需要被优先响应。在本实现方式中,通过将用户输入事件定义为需要被优先响应的事件,细化了优先响应事件的判定条件,从而使得优先响应事件的判定更为简单易行,降低了方案的实施难度。一种可能的实现方式中,监控应用主线程的事件处理队列,包括:构建监控子线程;使用监控子线程监控应用主线程的事件处理队列。在本实现方式中,通过构建子线程来实现监控操作,可以避免监控操作影响到主线程的正常运行,从而大大提高系统运行的稳定性。一种可能的实现方式中,判断事件处理队列中的新加入事件是否需要被优先响应之前,还包括:判断新加入事件是否依赖其他事件;当新加入事件不依赖其他事件时,进一步判断事件处理队列中的新加入事件是否需要被优先响应;当新加入事件依赖其他事件时,则判定事件处理队列中的新加入事件不需要被优先响应。在本实现方式中,进行优先响应判定时加入了依赖关系的参考,可以避免由事件处理顺序与依赖关系不匹配而导致的事件处理错误,从而大大提高了系统运行的稳定性,增强了本方案的实用性以及可行性。一种可能的实现方式中,收回应用主线程的代码执行权,包括,向应用主线程发中断消息,在应用主线程响应中断消息的过程中,收回应用主线程的代码执行权,将代码执行权交予系统框架重新分配。具体的,修改安卓运行时的虚拟机的中断发送流程,把中断直接重定向到安卓应用框架层的消息分配函数,安卓系统侧来控制接下来的执行代码。即发送应用代码导致的主线程阻塞时,通过中断,强制收回线程的代码执行权,交给系统侧重新分配。在本实现方式中,由于中断响应是软件系统中常见的响应设置,因此,通过中断方式来回收主线程的代码执行权不需要进行额外的响应配置,可以大大简化回收主线程的代码执行权的执行步骤,减少实现主线程的代码执行权回收所需要录入的代码量,降低主线程的代码执行权回收步骤的实现难度。一种可能的实现方式中,重新排列事件处理队列的过程还包括:在重新排列事件处理队列的过程中,保持除阻塞事件以及新加入事件以外的其他事件相互间的排序不变。即,在重排后的事件处理队列中,除阻塞事件以及新加入事件以外的其他事件相互间的排序与重拍前是一致的。这样就可以确保除阻塞事件以及新加入事件以外的其他事件相互间存在依赖关系时,事件处理队列的重排不会影响到事件的顺利处理。一种可能的实现方式中,后移阻塞事件的排位,包括:判断是否存在依赖阻塞事件的事件;当存在依赖阻塞事件的事件时,在重排后的事件处理队列中,将阻塞事件排在依赖该阻塞事件的事件之前;当不存在依赖阻塞事件的事件时,将阻塞事件排在重排后的事件处理队列的末尾。在本实现方式中,在重新排列事件处理队列的过程中加入了阻塞事件与其他事本文档来自技高网...

【技术保护点】
1.一种针对应用卡顿的处理方法,其特征在于,包括:/n监控应用主线程的事件处理队列,判断所述事件处理队列中的新加入事件是否需要被优先响应;/n当所述新加入事件需要被优先响应时,计算所述新加入事件在所述事件处理队列中的等待时间,判断所述等待时间是否超过预设时间阈值;/n当所述等待时间超过所述预设时间阈值时,收回所述应用主线程的代码执行权;/n在所述应用主线程的代码执行权被收回后,重新排列所述事件处理队列,包括:/n前移所述新加入事件的排位,将所述新加入事件排在所述重排后的事件处理队列的第一位;/n移除阻塞事件或后移阻塞事件的排位,其中,所述阻塞事件为所述事件处理队列被重排前,排在第一位且被主线程执行的事件;/n在所述事件处理队列被重排完毕后,恢复所述应用主线程的代码执行权,令所述应用主线程执行所述重排后的事件处理队列。/n

【技术特征摘要】
1.一种针对应用卡顿的处理方法,其特征在于,包括:
监控应用主线程的事件处理队列,判断所述事件处理队列中的新加入事件是否需要被优先响应;
当所述新加入事件需要被优先响应时,计算所述新加入事件在所述事件处理队列中的等待时间,判断所述等待时间是否超过预设时间阈值;
当所述等待时间超过所述预设时间阈值时,收回所述应用主线程的代码执行权;
在所述应用主线程的代码执行权被收回后,重新排列所述事件处理队列,包括:
前移所述新加入事件的排位,将所述新加入事件排在所述重排后的事件处理队列的第一位;
移除阻塞事件或后移阻塞事件的排位,其中,所述阻塞事件为所述事件处理队列被重排前,排在第一位且被主线程执行的事件;
在所述事件处理队列被重排完毕后,恢复所述应用主线程的代码执行权,令所述应用主线程执行所述重排后的事件处理队列。


2.根据权利要求1所述的方法,其特征在于,所述判断所述事件处理队列中的新加入事件是否需要被优先响应,包括:
判断所述新加入事件是否为用户输入事件;
当所述新加入事件为用户输入事件时,判定所述新加入事件需要被优先响应。


3.根据权利要求1或2所述的方法,其特征在于,所述监控应用主线程的事件处理队列,包括:
构建监控子线程;
使用所述监控子线程监控所述应用主线程的事件处理队列。


4.根据权利要求1-3中任一项所述的方法,其特征在于,所述判断所述事件处理队列中的新加入事件是否需要被优先响应之前,还包括:
判断所述新加入事件是否依赖其他事件;
当所述新加入事件不依赖其他事件时,判断所述事件处理队列中的新加入事件是否需要被优先响应。


5.根据权利要求1-4中任一项所述的方法,其特征在于,所述收回所述应用主线程的代码执行权,包括:
向所述应用主线程发中断消息,在所述应用主线程响应所述中断消息的过程中,收回所述应用主线程的代码执行权,将所述代码执行权交予系统框架重新分配。


6.根据权利要求1-5中任一项所述的方法,其特征在于,所述重新排列所述事件处理队列,还包括:
在所述重新排列所述事件处理队列的过程中,保持除所述阻塞事件以及所述新加入事件以外的其他事件相互间的排序不变。


7.根据权利要求1-6中任一项所述的方法,其特征在于,所述后移阻塞事件的排位,包括:
判断是否存在依赖所述阻塞事件的事件;
当存在依赖所述阻塞事件的事件时,在所述重排后的事件处理队列中,将所述阻塞事件排在依赖所述阻塞事件的事件之前。


8.根据权利要求7所述的方法,其特征在于,所述判断是否存在依赖所述阻塞事件的事件之后,还包括:
当不存在依赖所述阻塞事件的事件时,将所述阻塞事件排在所述重排后的事件处理队列的末尾。


9.根据权利要求1-6中任一项所述的方法,其特征在于,所述后移阻塞事件的排位,包括:将所述阻塞事件排在所述重排后的事件处理队列的第二位。


10.根据权利要求1-6中任一项所述的方法,其特征在于,所述移除阻塞事件,包括:
判断所述阻塞事件导致的重新排列所述事件处理队列的次数是否大于预设次数阈值;
当所述重新排列所述事件处理队列的次数大于预设次数阈值时,移除所述阻塞事件和/或输出提示信息。


11.一种针对应用卡顿的处理装置,其特征在于,包括:
事件监控模块,其用于监控应用主线程的事件处理队列,判断所述事件处理队列中的新加入事件是否需要被优先响应;
等待时间判断模块,其用于当所述新加入事件需要被优先响应时,计算所述新加入事件在所述事件处理队列中的...

【专利技术属性】
技术研发人员:王小龙赵俊王凯
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1