CN111639004B - 用户界面卡顿监控方法、装置及存储介质 - Google Patents
用户界面卡顿监控方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111639004B CN111639004B CN202010401637.7A CN202010401637A CN111639004B CN 111639004 B CN111639004 B CN 111639004B CN 202010401637 A CN202010401637 A CN 202010401637A CN 111639004 B CN111639004 B CN 111639004B
- Authority
- CN
- China
- Prior art keywords
- monitoring
- preset reference
- morton
- user interface
- preset
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3058—Monitoring arrangements for monitoring environmental properties or parameters of the computing system or of the computing system component, e.g. monitoring of power, currents, temperature, humidity, position, vibrations
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种用户界面卡顿监控方法、装置及存储介质。该方案可以创建卡顿监控对象,卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中预设引用用于与一对象进行关联,以通过预设引用调用对象,将预设引用与卡顿监控对象关联,在主线程执行绘制用户界面的任务过程中,监控预设引用是否关联卡顿监控对象,若预设引用未关联卡顿监控对象,则重新设置卡顿监控对象与预设引用之间的关联关系。本申请实施例所提供的方案可以实时检测监控Printer被覆盖的情况,并且在监控Printer被第三方业务覆盖后,对其进行重设,提升了UI卡顿监控方案的稳定性。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种用户界面卡顿监控方法、装置及存储介质。
背景技术
在Android***当中,由于Android设定的刷新率是60FPS(Frame PerSecond),也就是每秒60帧的刷新率,约合16ms刷新一次,因此***每隔16ms会发出VSYNC信号重绘界面(Activity),触发对UI进行渲染,如果每一次都渲染成功,这样就达到流程的画面所需要的60fps。
在实际使用过程中,在执行某些动画或者进行滑动的时候,我们会感觉到UI卡顿现象,动画或者滑动不是那么的顺畅,这就是操作过于复杂,产生了丢帧现象,最终导致卡顿。现有技术一般通过对MainLooper设置自定义的Printer实现UI卡顿监控,具体包括以下步骤:1、首先对MainLooper设置自定义的LogPrinter。2、在MainLooper每次执行一个任务前,通过LogPrinter记录开始时间T1。3、让MainLooper正常执行任务(dispatchMessage)。4、在MainLooper每次执行一个任务完成后,通过LogPrinter记录开始时间T2。5、对比T2和T1之间的差值,若差值达到设定的阈值,通知子线程进行相关信息采集:如CPU使用率,logcat日志,并把相关信息写入文件,最终上报这些文件即可。
本方案申请人发现,上述方案是建立设置MainLooper的LogPrinter接口来实现的,但是用来监控主线程的Printer接口只能绑定一个业务LogPrinter,并且任何业务都能对他设置,所以UI卡顿监控方案会存在以下问题:Printer接口有可能会被后设置的业务方所覆盖掉,导致整个监控方案失效。
发明内容
本发明实施例提供一种用户界面卡顿监控方法、装置及存储介质,可以在监控Printer被第三方业务覆盖后,对其进行重设,提升了UI卡顿监控方案的稳定性。
本发明实施例提供一种用户界面卡顿监控方法,包括:
创建卡顿监控对象,所述卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中所述预设引用用于与一对象进行关联,以通过所述预设引用调用对象;
将所述预设引用与所述卡顿监控对象关联;
在所述主线程执行绘制用户界面的任务过程中,监控所述预设引用是否关联所述卡顿监控对象;
若所述预设引用未关联所述卡顿监控对象,则重新设置所述卡顿监控对象与所述预设引用之间的关联关系。
本发明实施例还提供一种用户界面卡顿监控装置,包括:
设置单元,用于创建卡顿监控对象,所述卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中所述预设引用用于与一对象进行关联,以通过所述预设引用调用对象;
关联单元,用于将所述预设引用与所述卡顿监控对象关联;
监控单元,用于在所述主线程执行绘制用户界面的任务过程中,监控所述预设引用是否关联所述卡顿监控对象;
重设单元,用于当所述预设引用未关联所述卡顿监控对象时,重新设置所述卡顿监控对象与所述预设引用之间的关联关系。
本发明实施例还提供一种存储介质,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一用户界面卡顿监控方法。
本发明实施例提供的音频处理方案,可以创建卡顿监控对象,卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中预设引用用于与一对象进行关联,以通过预设引用调用对象,将预设引用与卡顿监控对象关联,在主线程执行绘制用户界面的任务过程中,监控预设引用是否关联卡顿监控对象,若预设引用未关联卡顿监控对象,则重新设置卡顿监控对象与预设引用之间的关联关系。本申请实施例所提供的方案可以实时检测监控Printer被覆盖的情况,并且在监控Printer被第三方业务覆盖后,对其进行重设,提升了UI卡顿监控方案的稳定性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本发明实施例提供的用户界面卡顿监控方法的第一流程示意图;
图1b是本发明实施例提供的用户界面卡顿监控方法的第二流程示意图;
图2a是本发明实施例提供的用户界面卡顿监控方法的第三流程示意图;
图2b是本发明实施例提供的用户界面卡顿监控方法的第四流程示意图;
图3a是本发明实施例提供的用户界面卡顿监控装置的第一种结构示意图;
图3b是本发明实施例提供的用户界面卡顿监控装置的第二种结构示意图;
图4是本发明实施例提供的服务器的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本发明实施例提供一种用户界面卡顿监控方法,该用户界面卡顿监控方法的执行主体可以是本发明实施例提供的用户界面卡顿监控装置,或者集成了该用户界面卡顿监控装置的服务器,其中该用户界面卡顿监控装置可以采用硬件或者软件的方式实现。
在描述本发明的技术方案之前,先对相关的技术术语进行简单解释:
UI(用户界面,User Interface)卡顿:当VSYNC信号中断时,应用若不能及时处理绘制渲染刷新,导致刷新帧率过低,未达到60Hz的硬件刷新标准,就会造成卡顿。
绘制:View层经过测量、布局、绘制(具体分别是onMeasure、onLayout、onDraw)后的数据存入Surface缓存。
渲染:完成绘制后,View层通知SurfaceFlinger将数据渲染。
刷新:***刷新机制(概括为Choreographer接到VSYNC中断后)每隔16ms将SurfaceFlinger合成好的渲染数据刷新到屏幕。
主线程:负责绘制UI的线程,使用MainLooper来执行“绘制UI”任务
MainLooper:在主线程内,负责各种函数任务,包括UI绘制任务。
ANR:安卓中的应用主线程如果5秒内无法完成任务,就会触发无响应机制(Application not response),出现强制关闭应用的弹窗。
Java反射:Java反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态的获取信息以及动态调用对象的方法的功能称为java的反射机制。通过Java反射能获取一个对象或者类的引用。
如图1a所示,图1a是本发明实施例提供的用户界面卡顿监控方法的第一流程示意图,该用户界面卡顿监控方法的具体流程可以如下:
101、创建卡顿监控对象,卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中预设引用用于与一对象进行关联,以通过预设引用调用对象。
在一实施例中,在主线程当中设置卡顿监控Printer函数,并建立预设线程。其中,上述主线程可以为Looper,在主线程当中设置卡顿监控Printer函数用来判断UI是否卡顿。其中,UI线程有个Looper,在其loop方法中会不断取出message,调用其绑定的Handler在UI线程执行。如果在handler的dispatchMesaage方法里有耗时操作,就会发生卡顿。
具体的,可以通过查找Looper.loop()的源代码,只要检测上述源代码当中msg.target.dispatchMessage(msg)的执行时间,就能检测到部分UI线程是否有耗时的操作。注意到这行执行代码的前后,有两个printer函数,如果设置了logging,会分别打印出“Printer.recordStartTime()”和“Printer.recordEndTime()”这样的日志,这样我们就可以通过两次log的时间差值,来计算dispatchMessage的执行时间,从而设置阈值判断是否发生了卡顿。
进一步的,上述预设线程可以为监控线程,在本申请实施例中,会建立一个监控线程,具体可以在监控模块PrinterManager内部建立,并且还可以在监控线程实现了检测卡顿监控Printer是否被覆盖和重新设置的逻辑。
102、将预设引用与卡顿监控对象关联。
103,在主线程执行绘制用户界面的任务过程中,监控预设引用是否关联卡顿监控对象。
在一实施例中,监控所述预设引用是否关联所述卡顿监控对象,可以包括以下步骤:
创建监控线程,通过所述监控线程监控所述主进程绘制用户界面所消耗的时长;
若所述时长达到预设时长阈值且所述绘制用户界面的任务未结束,则对所述卡顿监控对象进行反射以获得所述卡顿监控对象的当前引用;
检查所述卡顿监控对象的当前引用是否为所述预设引用;
若所述卡顿监控对象的当前引用为所述预设引用,则确定所述预设引用关联所述卡顿监控对象;
若所述卡顿监控对象的引用不为所述预设引用,则确定所述预设引用未关联所述卡顿监控对象。
在一实施例中,上述监控线程可以在主线程任务开始执行前开始计时,任务执行结束后停止计时。从而获取到上述主进程执行任务所消耗的时长。若时长大于预设时长,则对Printer函数进行反射以确定引用Printer函数的对象。
在一实施例中,假如卡顿监控Printer被覆盖了,那么无法停止,一定会发生超时。因此在获取到上述主进程执行任务所消耗的时长后,可以判断是否大于预设时长,若不大于,则确定卡顿监控Printer未被第三方业务覆盖,可以结束当前流程。若大于上述预设时长,则可以确定卡顿监控Printer被第三方业务覆盖。
进一步的,在这个超时逻辑里面,对上述Printer进行反射,以确定引用所述Printer函数的对象。
104、若预设引用未关联卡顿监控对象,则重新设置卡顿监控对象与预设引用之间的关联关系。
在一实施例中,根据引用Printer函数的对象以及预设线程中的逻辑关系重新在主线程中设置卡顿监控Printer函数。具体的,检查上述Printer引用是否为上述卡顿监控Printer,看他的引用是不是被改了,如果是,就重设,具体可以根据预设线程中的逻辑关系重新在主线程中设置卡顿监控Printer函数。也即重新设置所述卡顿监控对象与所述预设引用之间的关联关系的步骤,包括:
获得所述预设引用当前关联的对象;
判断所述预设引用当前关联的对象是否为空;
若所述预设引用当前关联的对象为空,则重新建立所述卡顿监控对象与所述预设引用之间的关联关系;
若所述预设引用当前关联的对象不为空,则将所述预设引用当前关联的对象以及所述卡顿监控对象加入到预先设置的引用队列对象当中,并建立预设引用与所述引用队列对象的关联关系,其中所述引用队列对象用于接收到引用消息后,将所述引用消息分发至所述引用消息对应的对象。
其中,上述重设逻辑关系为预先在监控线程当中实现的。
通过上述步骤,即可实现卡顿监控Printer函数的保活,提高监控方案的稳定性。进一步的,在另一实施例中,还可以监控Java的垃圾回收事件,如果监控Printer触发了finalize方法回调,则对卡顿监控Printer函数进行重设。也即监控所述预设引用是否关联所述卡顿监控对象的步骤,包括:
获得所述卡顿监控对象包括的垃圾回收相关方法;
在所述垃圾回收相关方法中检测是否发生垃圾回收事件;
若发生垃圾回收事件,则确定所述预设引用未关联所述卡顿监控对象;
若未发生垃圾回收事件,则确定所述预设引用关联所述卡顿监控对象。
具体的,在一实施例中,可以在监控Printer的finalize方法中监听Java回收事件,并且监听回调中,实现重新设置监控Printer的逻辑。其中,在Java当中随着程序的运行,内存中存在的实例对象、变量等信息占据的内存越来越多,如果不及时进行垃圾回收,必然会带来程序性能的下降,甚至会因为可用内存不足造成一些不必要的***异常。如果某个对象已经不存在任何引用,那么它可以被回收,具体可以通过引用计数算法和可达性分析算法来进行垃圾回收,此处不再赘述。在本实施例中,当Printer被覆盖的时候,因为引用丢失,会被Java进行垃圾回收,所以会触发到finalize方法,从而触发预埋好的重新设置监控Printer的逻辑,实现保活。其中,finalize方法是Object提供的的实例方法,使用规则如下:当对象不再被任何对象引用时,GC会调用该对象的finalize()方法,finalize()是Object的方法,子类可以覆盖这个方法来做一些***资源的释放或者数据的清理,可以在finalize()让这个对象再次被引用,避免被GC回收。
因此在该实施例中,可以通过两种保活手段对卡顿监控Printer函数实现保活,如图1b所示,图1b是本发明实施例提供的用户界面卡顿监控方法的第二流程示意图。第一种保活手段是监控Java的垃圾回收事件,如果监控Printer触发了finalize方法回调,就进行重设。第二种保活手段是增加监控计时器来进行检测,如果检测到被覆盖了,就进行重设。
由上所述,本发明实施例提出的用户界面卡顿监控方法可以创建卡顿监控对象,卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中预设引用用于与一对象进行关联,以通过预设引用调用对象,将预设引用与卡顿监控对象关联,在主线程执行绘制用户界面的任务过程中,监控预设引用是否关联卡顿监控对象,若预设引用未关联卡顿监控对象,则重新设置卡顿监控对象与预设引用之间的关联关系。本申请实施例所提供的方案可以实时检测监控Printer被覆盖的情况,并且在监控Printer被第三方业务覆盖后,对其进行重设,提升了UI卡顿监控方案的稳定性。
根据前面实施例所描述的方法,以下将作进一步详细说明。
请参阅图2a,图2a是本发明实施例提供的用户界面卡顿监控方法的第三流程示意图。所述方法包括:
201、获取原始Printer函数并对原始Printer函数进行反射以确定引用原始Printer函数的对象。
在进行UI卡顿监控过程中,申请人发现,卡顿监控Printer有可能会覆盖原先已设置的其他业务方Printer,导致其他业务的监控失效。因此本实施例可以在设置卡顿监控Printer函数之前,通过加入代理中间层,对第三方业务Printer进行管理,并且转发log消息给第三方业务,保证第三方业务能正常运行,如图2b所示。具体可以在设置卡顿监控Printer函数之前,获取原始Printer函数并对原始Printer函数进行反射以确定引用原始Printer函数的对象。
需要说明的是,本申请当中实现可监控模块PrinterManager,PrinterManager提供2个能力,分别是内部实现了PrinterList的队列,提供能存放多个Printer实例的能力,以及提供了分发消息给已保存的Printer的能力。
202、判断引用原始Printer函数的对象是否为空,若是,则执行步骤203,若否,则执行步骤204。
其中,本实施例通过判断引用原始Printer函数的对象是否为空来确定是否有第三方业务在使用,具体的,若确定引用原始Printer函数的对象为空,则确定有第三方业务在使用,可以继续执行步骤203;若确定引用原始Printer函数的对象不为空,则确定没有第三方业务在使用,可以继续执行步骤204。
203、将卡顿监控Printer函数加入到监控模块的Printer函数队列当中,并建立预设线程。
在一实施例中,如果Printer引用为空,则代表没有第三方业务在使用,可以将卡顿监控Printer函数加入到监控模块的Printer函数队列当中,并建立预设线程。其中上述预设线程可以为监控线程,在本申请实施例中,会建立一个监控线程,具体可以在监控模块PrinterManager内部建立,并且还可以在监控线程实现了检测卡顿监控Printer是否被覆盖和重新设置的逻辑。
204、将原始Printer函数以及卡顿监控Printer函数加入到监控模块的Printer函数队列当中,并建立预设线程。
在一实施例中,如果Printer引用不为空,那么代表有第三方业务在用。那么就把它的实例(称为第三方业务Printer)加入到PrinterManager的PrinterList队列中,通过PrinterManager来保存,并建立预设线程。
进一步的,当后续的Printer回调到来时,会先回调到PrinterManager,再由PrinterManager分发给保存好的第三方业务Printer。这样子第三方业务Printer也能正常接收回调消息,正常运作,不会受影响。也即在将所述原始Printer函数以及所述卡顿监控Printer函数加入到监控模块的Printer函数队列当中之后,所述方法还包括:
当所述引用队列对象接收到回调消息时,确定所述回调消息在所述引用队列对象中对应的目标对象;
控制所述引用队列对象将所述回调消息分发至所述目标对象,以使所述目标对象接收所述回调信息。
具体的,当后续的Printer函数进行回调时,回调至所述监控模块当中,然后控制所述监控模块发送至所述Printer函数队列中的原始Printer函数,以使所述原始Printer函数接收回调信息。
205、通过预设线程获取主进程执行任务所消耗的时长。
在一实施例中,上述监控线程可以在主线程任务开始执行前开始计时,任务执行结束后停止计时。从而获取到上述主进程执行任务所消耗的时长。
206、若时长大于预设时长,则对Printer函数进行反射以确定引用Printer函数的对象。
在一实施例中,假如卡顿监控Printer被覆盖了,那么无法停止,一定会发生超时。因此在获取到上述主进程执行任务所消耗的时长后,可以判断是否大于预设时长,若不大于,则确定卡顿监控Printer未被第三方业务覆盖,可以结束当前流程。若大于上述预设时长,则可以确定卡顿监控Printer被第三方业务覆盖。进一步的,在这个超时逻辑里面,对上述Printer进行反射,以确定引用所述Printer函数的对象。
207、根据引用Printer函数的对象以及预设线程中的逻辑关系重新在主线程中设置卡顿监控Printer函数。
在一实施例中,检查上述Printer引用是否为上述卡顿监控Printer,看他的引用是不是被改了,如果是,就重设,具体可以根据预设线程中的逻辑关系重新在主线程中设置卡顿监控Printer函数。
由上所述,本发明实施例提出的用户界面卡顿监控方法可以获取原始Printer函数并对原始Printer函数进行反射以确定引用原始Printer函数的对象,判断引用原始Printer函数的对象是否为空,若是,则将卡顿监控Printer函数加入到监控模块的Printer函数队列当中,并建立预设线程,若否,则将原始Printer函数以及卡顿监控Printer函数加入到监控模块的Printer函数队列当中,并建立预设线程,通过预设线程获取主进程执行任务所消耗的时长,若时长大于预设时长,则对Printer函数进行反射以确定引用Printer函数的对象,根据引用Printer函数的对象以及预设线程中的逻辑关系重新在主线程中设置卡顿监控Printer函数。本申请实施例所提供的方案可以检测在监控Printer设置前是否有业务在使用Printer接口的情况,并使监控Printer不会对第三方业务造成影响或者导致第三方业务失效,还能实时检测监控Printer被覆盖的情况,并且在监控Printer被第三方业务覆盖后,对其进行重设,提升了UI卡顿监控方案的稳定性。
为了实施以上方法,本发明实施例还提供一种用户界面卡顿监控装置,该用户界面卡顿监控装置具体可以集成在终端设备如手机、平板电脑等设备中。
例如,如图3a所示,是本发明实施例提供的用户界面卡顿监控装置的第一种结构示意图。该用户界面卡顿监控装置可以包括:
设置单元301,用于创建卡顿监控对象,所述卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中所述预设引用用于与一对象进行关联,以通过所述预设引用调用对象。
在一实施例中,可以在主线程当中设置卡顿监控Printer函数,并建立预设线程。其中,上述主线程可以为Looper,设置单元301在主线程当中设置卡顿监控Printer函数用来判断UI是否卡顿。其中,UI线程有个Looper,在其loop方法中会不断取出message,调用其绑定的Handler在UI线程执行。如果在handler的dispatchMesaage方法里有耗时操作,就会发生卡顿。
具体的,可以通过查找Looper.loop()的源代码,只要检测上述源代码当中msg.target.dispatchMessage(msg)的执行时间,就能检测到部分UI线程是否有耗时的操作。注意到这行执行代码的前后,有两个printer函数,如果设置了logging,会分别打印出“Printer.recordStartTime()”和“Printer.recordEndTime()”这样的日志,这样我们就可以通过两次log的时间差值,来计算dispatchMessage的执行时间,从而设置阈值判断是否发生了卡顿。
进一步的,上述预设线程可以为监控线程,在本申请实施例中,设置单元301还会建立一个监控线程,具体可以在监控模块PrinterManager内部建立,并且还可以在监控线程实现了检测卡顿监控Printer是否被覆盖和重新设置的逻辑。
关联单元302,用于将所述预设引用与所述卡顿监控对象关联。
监控单元303,用于在所述主线程执行绘制用户界面的任务过程中,监控所述预设引用是否关联所述卡顿监控对象。
重设单元304,用于当所述预设引用未关联所述卡顿监控对象时,重新设置所述卡顿监控对象与所述预设引用之间的关联关系。
在一实施例中,根据引用所述Printer函数的对象以及所述预设线程中的逻辑关系重新在所述主线程中设置所述卡顿监控Printer函数。具体的,检查上述Printer引用是否为上述卡顿监控Printer,看他的引用是不是被改了,如果是,就由重设单元304重新设置,具体可以根据预设线程中的逻辑关系重新在主线程中设置卡顿监控Printer函数。
在一实施例中,请参阅图3b,所述监控单元303可以包括:
创建子单元3031,用于创建监控线程,通过所述监控线程监控所述主进程绘制用户界面所消耗的时长。
在一实施例中,上述监控线程可以在主线程任务开始执行前开始计时,任务执行结束后停止计时。从而使获取单元302获取到上述主进程执行任务所消耗的时长。
获取子单元3032,用于当所述时长达到预设时长阈值且所述绘制用户界面的任务未结束时,对所述卡顿监控对象进行反射以获得所述卡顿监控对象的当前引用;
检查子单元3033,用于检查所述卡顿监控对象的当前引用是否为所述预设引用;
确定子单元3034,用于当所述卡顿监控对象的当前引用为所述预设引用时,确定所述预设引用关联所述卡顿监控对象,当所述卡顿监控对象的引用不为所述预设引用时,确定所述预设引用未关联所述卡顿监控对象。
在一实施例中,所述获取子单元3032,还用于获得所述卡顿监控对象包括的垃圾回收相关方法;
所述检查子单元3033,还用于在所述垃圾回收相关方法中检测是否发生垃圾回收事件;
所述确定子单元3034,还用于当发生垃圾回收事件时,确定所述预设引用未关联所述卡顿监控对象,当未发生垃圾回收事件时,确定所述预设引用关联所述卡顿监控对象。
在一实施例中,所述重设单元304可以包括:
判断子单元3041,用于获得所述预设引用当前关联的对象,并判断所述预设引用当前关联的对象是否为空;
重设子单元3042,用于当所述预设引用当前关联的对象为空时,重新建立所述卡顿监控对象与所述预设引用之间的关联关系,当所述预设引用当前关联的对象不为空时,将所述预设引用当前关联的对象以及所述卡顿监控对象加入到预先设置的引用队列对象当中,并建立预设引用与所述引用队列对象的关联关系,其中所述引用队列对象用于接收到引用消息后,将所述引用消息分发至所述引用消息对应的对象。
本发明实施例提出的用户界面卡顿监控装置,可以创建卡顿监控对象,卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中预设引用用于与一对象进行关联,以通过预设引用调用对象,将预设引用与卡顿监控对象关联,在主线程执行绘制用户界面的任务过程中,监控预设引用是否关联卡顿监控对象,若预设引用未关联卡顿监控对象,则重新设置卡顿监控对象与预设引用之间的关联关系。本申请实施例所提供的方案可以实时检测监控Printer被覆盖的情况,并且在监控Printer被第三方业务覆盖后,对其进行重设,提升了UI卡顿监控方案的稳定性。
本发明实施例还提供一种终端,如图4所示,该终端可以包括射频(RF,RadioFrequency)电路601、包括有一个或一个以上计算机可读存储介质的存储器602、输入单元603、显示单元604、传感器605、音频电路606、无线保真(WiFi,Wireless Fidelity)模块607、包括有一个或者一个以上处理核心的处理器608、以及电源609等部件。本领域技术人员可以理解,图4中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路601可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器608处理;另外,将涉及上行的数据发送给基站。通常,RF电路601包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM,Subscriber Identity Module)卡、收发信机、耦合器、低噪声放大器(LNA,Low Noise Amplifier)、双工器等。此外,RF电路601还可以通过无线通信与网络和其他设备通信。无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯***(GSM,Global System of Mobile communication)、通用分组无线服务(GPRS,GeneralPacket Radio Service)、码分多址(CDMA,Code Division Multiple Access)、宽带码分多址(WCDMA,Wideband Code Division Multiple Access)、长期演进(LTE,Long TermEvolution)、电子邮件、短消息服务(SMS,Short Messaging Service)等。
存储器602可用于存储软件程序以及模块,处理器608通过运行存储在存储器602的软件程序以及模块,从而执行各种功能应用以及信息处理。存储器602可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器602可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器602还可以包括存储器控制器,以提供处理器608和输入单元603对存储器602的访问。
输入单元603可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体的实施例中,输入单元603可包括触敏表面以及其他输入设备。触敏表面,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面上或在触敏表面附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器608,并能接收处理器608发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面。除了触敏表面,输入单元603还可以包括其他输入设备。具体地,其他输入设备可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元604可用于显示由用户输入的信息或提供给用户的信息以及终端的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元604可包括显示面板,可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-Emitting Diode)等形式来配置显示面板。进一步的,触敏表面可覆盖显示面板,当触敏表面检测到在其上或附近的触摸操作后,传送给处理器608以确定触摸事件的类型,随后处理器608根据触摸事件的类型在显示面板上提供相应的视觉输出。虽然在图4中,触敏表面与显示面板是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面与显示面板集成而实现输入和输出功能。
终端还可包括至少一种传感器605,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板的亮度,接近传感器可在终端移动到耳边时,关闭显示面板和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路606、扬声器,传声器可提供用户与终端之间的音频接口。音频电路606可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路606接收后转换为音频数据,再将音频数据输出处理器608处理后,经RF电路601以发送给比如另一终端,或者将音频数据输出至存储器602以便进一步处理。音频电路606还可能包括耳塞插孔,以提供外设耳机与终端的通信。
WiFi属于短距离无线传输技术,终端通过WiFi模块607可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图4示出了WiFi模块607,但是可以理解的是,其并不属于终端的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器608是终端的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器602内的软件程序和/或模块,以及调用存储在存储器602内的数据,执行终端的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器608可包括一个或多个处理核心;优选的,处理器608可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器608中。
终端还包括给各个部件供电的电源609(比如电池),优选的,电源可以通过电源管理***与处理器608逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。电源609还可以包括一个或一个以上的直流或交流电源、再充电***、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,终端中的处理器608会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器602中,并由处理器608来运行存储在存储器602中的应用程序,从而实现各种功能:
创建卡顿监控对象,所述卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中所述预设引用用于与一对象进行关联,以通过所述预设引用调用对象;
将所述预设引用与所述卡顿监控对象关联;
在所述主线程执行绘制用户界面的任务过程中,监控所述预设引用是否关联所述卡顿监控对象;
若所述预设引用未关联所述卡顿监控对象,则重新设置所述卡顿监控对象与所述预设引用之间的关联关系。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见上文针对用户界面卡顿监控方法的详细描述,此处不再赘述。
由上可知,本发明实施例的终端可以创建卡顿监控对象,卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中预设引用用于与一对象进行关联,以通过预设引用调用对象,将预设引用与卡顿监控对象关联,在主线程执行绘制用户界面的任务过程中,监控预设引用是否关联卡顿监控对象,若预设引用未关联卡顿监控对象,则重新设置卡顿监控对象与预设引用之间的关联关系。本申请实施例所提供的方案可以实时检测监控Printer被覆盖的情况,并且在监控Printer被第三方业务覆盖后,对其进行重设,提升了UI卡顿监控方案的稳定性。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种用户界面卡顿监控方法中的步骤。例如,该指令可以执行如下步骤:
创建卡顿监控对象,所述卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中所述预设引用用于与一对象进行关联,以通过所述预设引用调用对象;
将所述预设引用与所述卡顿监控对象关联;
在所述主线程执行绘制用户界面的任务过程中,监控所述预设引用是否关联所述卡顿监控对象;
若所述预设引用未关联所述卡顿监控对象,则重新设置所述卡顿监控对象与所述预设引用之间的关联关系。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一种用户界面卡顿监控方法中的步骤,因此,可以实现本发明实施例所提供的任一种用户界面卡顿监控方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本发明实施例所提供的一种用户界面卡顿监控方法、装置、存储介质以及终端进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种用户界面卡顿监控方法,其特征在于,包括:
创建卡顿监控对象,所述卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中所述预设引用用于与一对象进行关联,以通过所述预设引用调用对象;
将所述预设引用与所述卡顿监控对象关联;
在所述主线程执行绘制用户界面的任务过程中,监控所述预设引用是否关联所述卡顿监控对象;
若所述预设引用未关联所述卡顿监控对象,则获得所述预设引用当前关联的对象;
判断所述预设引用当前关联的对象是否为空;
若所述预设引用当前关联的对象为空,则重新建立所述卡顿监控对象与所述预设引用之间的关联关系;
若所述预设引用当前关联的对象不为空,则将所述预设引用当前关联的对象以及所述卡顿监控对象加入到预先设置的引用队列对象当中,并建立预设引用与所述引用队列对象的关联关系,其中所述引用队列对象用于接收到引用消息后,将所述引用消息分发至所述引用消息对应的对象。
2.如权利要求1所述的用户界面卡顿监控方法,其特征在于,监控所述预设引用是否关联所述卡顿监控对象,包括:
创建监控线程;
通过所述监控线程监控主进程绘制用户界面所消耗的时长;
若所述时长达到预设时长阈值且所述绘制用户界面的任务未结束,则对所述卡顿监控对象进行反射以获得所述卡顿监控对象的当前引用;
检查所述卡顿监控对象的当前引用是否为所述预设引用;
若所述卡顿监控对象的当前引用为所述预设引用,则确定所述预设引用关联所述卡顿监控对象;
若所述卡顿监控对象的引用不为所述预设引用,则确定所述预设引用未关联所述卡顿监控对象。
3.如权利要求1所述的用户界面卡顿监控方法,其特征在于,监控所述预设引用是否关联所述卡顿监控对象的步骤,包括:
获得所述卡顿监控对象包括的垃圾回收相关方法;
在所述垃圾回收相关方法中检测是否发生垃圾回收事件;
若发生垃圾回收事件,则确定所述预设引用未关联所述卡顿监控对象;
若未发生垃圾回收事件,则确定所述预设引用关联所述卡顿监控对象。
4.如权利要求1所述的用户界面卡顿监控方法,其特征在于,在建立预设引用与所述引用队列对象的关联关系之后,所述方法还包括:
当所述引用队列对象接收到回调消息时,确定所述回调消息在所述引用队列对象中对应的目标对象;
控制所述引用队列对象将所述回调消息分发至所述目标对象,以使所述目标对象接收所述回调消息 。
5.一种用户界面卡顿监控装置,其特征在于,包括:
设置单元,用于创建卡顿监控对象,所述卡顿监控对象用于监控主线程绘制用户界面的任务,以及获得预设引用,其中所述预设引用用于与一对象进行关联,以通过所述预设引用调用对象;
关联单元,用于将所述预设引用与所述卡顿监控对象关联;
监控单元,用于在所述主线程执行绘制用户界面的任务过程中,监控所述预设引用是否关联所述卡顿监控对象;
重设单元,包括判断子模块和重设子模块,所述判断子模块,用于当所述预设引用未关联所述卡顿监控对象时,获得所述预设引用当前关联的对象,并判断所述预设引用当前关联的对象是否为空;
所述重设子模块,用于当所述预设引用当前关联的对象为空时,重新建立所述卡顿监控对象与所述预设引用之间的关联关系,当所述预设引用当前关联的对象不为空时,将所述预设引用当前关联的对象以及所述卡顿监控对象加入到预先设置的引用队列对象当中,并建立预设引用与所述引用队列对象的关联关系,其中所述引用队列对象用于接收到引用消息后,将所述引用消息分发至所述引用消息对应的对象。
6.如权利要求5所述的用户界面卡顿监控装置,其特征在于,所述监控单元包括:
创建子单元,用于创建监控线程,通过所述监控线程监控主进程绘制用户界面所消耗的时长;
获取子单元,用于当所述时长达到预设时长阈值且所述绘制用户界面的任务未结束时,对所述卡顿监控对象进行反射以获得所述卡顿监控对象的当前引用;
检查子单元,用于检查所述卡顿监控对象的当前引用是否为所述预设引用;
确定子单元,用于当所述卡顿监控对象的当前引用为所述预设引用时,确定所述预设引用关联所述卡顿监控对象,当所述卡顿监控对象的引用不为所述预设引用时,确定所述预设引用未关联所述卡顿监控对象。
7.如权利要求6所述的用户界面卡顿监控装置,其特征在于:
所述获取子单元,还用于获得所述卡顿监控对象包括的垃圾回收相关方法;
所述检查子单元,还用于在所述垃圾回收相关方法中检测是否发生垃圾回收事件;
所述确定子单元,还用于当发生垃圾回收事件时,确定所述预设引用未关联所述卡顿监控对象,当未发生垃圾回收事件时,确定所述预设引用关联所述卡顿监控对象。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至4任一项所述的用户界面卡顿监控方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010401637.7A CN111639004B (zh) | 2020-05-12 | 2020-05-12 | 用户界面卡顿监控方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010401637.7A CN111639004B (zh) | 2020-05-12 | 2020-05-12 | 用户界面卡顿监控方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111639004A CN111639004A (zh) | 2020-09-08 |
CN111639004B true CN111639004B (zh) | 2023-03-24 |
Family
ID=72330055
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010401637.7A Active CN111639004B (zh) | 2020-05-12 | 2020-05-12 | 用户界面卡顿监控方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111639004B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527627B (zh) * | 2020-11-02 | 2024-05-10 | 百果园技术(新加坡)有限公司 | 一种页面卡顿检测方法、装置、设备及介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108512695A (zh) * | 2018-03-12 | 2018-09-07 | 腾讯音乐娱乐科技(深圳)有限公司 | 监控应用卡顿的方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8079037B2 (en) * | 2005-10-11 | 2011-12-13 | Knoa Software, Inc. | Generic, multi-instance method and GUI detection system for tracking and monitoring computer applications |
CN105589783A (zh) * | 2014-11-18 | 2016-05-18 | 广州市动景计算机科技有限公司 | 应用程序卡顿问题数据获取方法及装置 |
CN109284101B (zh) * | 2017-07-20 | 2022-04-05 | 菜鸟智能物流控股有限公司 | 一种对象属性的关联变更方法和装置 |
CN108563581A (zh) * | 2018-04-25 | 2018-09-21 | 咪咕文化科技有限公司 | 异常检测处理方法及装置、电子设备及计算机存储介质 |
CN109324946A (zh) * | 2018-09-10 | 2019-02-12 | 天津字节跳动科技有限公司 | 运行监测方法、装置、电子设备及计算机可读存储介质 |
CN110489179B (zh) * | 2019-08-02 | 2022-12-27 | 北京字节跳动网络技术有限公司 | 获取调用栈栈帧函数签名的方法、装置、介质和设备 |
-
2020
- 2020-05-12 CN CN202010401637.7A patent/CN111639004B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108512695A (zh) * | 2018-03-12 | 2018-09-07 | 腾讯音乐娱乐科技(深圳)有限公司 | 监控应用卡顿的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111639004A (zh) | 2020-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108512695B (zh) | 监控应用卡顿的方法及装置 | |
US11137876B2 (en) | Information display method, device and terminal for displaying progress on application icon | |
US10379696B2 (en) | Method and apparatus for displaying popup window message | |
CN106993227B (zh) | 一种进行信息展示的方法和装置 | |
US20160314219A1 (en) | Method and apparatus for invoking application programming interface | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN110188016B (zh) | 应用程序无响应阻塞的检测方法、终端以及存储介质 | |
US10171640B2 (en) | Method, apparatus, and system for displaying message in mobile terminal | |
CN104965722B (zh) | 一种显示信息的方法及装置 | |
EP2876539A1 (en) | Method, device and terminal apparatus for responding to a sliding operation | |
CN107015866B (zh) | 一种数据处理方法及装置 | |
CN111405112B (zh) | 消息提示方法及电子设备 | |
CN103197944B (zh) | 一种应用程序的进程的性能确定方法和计算机*** | |
CN111639004B (zh) | 用户界面卡顿监控方法、装置及存储介质 | |
CN114327087A (zh) | 输入事件处理方法、装置、电子设备和存储介质 | |
CN105278942B (zh) | 组件管理方法及装置 | |
CN108011860B (zh) | 一种处理广播消息的方法、装置及终端 | |
US11150913B2 (en) | Method, device, and terminal for accelerating startup of application | |
CN117407133A (zh) | 一种任务处理方法、装置及计算机可读存储介质 | |
KR20220107013A (ko) | 데이터 처리 방법 및 전자 장치 | |
CN112003983A (zh) | 自适应振动***、终端、方法和计算机可读存储介质 | |
US10664436B2 (en) | Application acceleration method and application acceleration device | |
CN104717283A (zh) | 文件下载的控制方法、终端及逻辑处理服务器 | |
CN104700031B (zh) | 防止应用操作中远程代码被执行的方法、装置及*** | |
CN113821142A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |