CN113806183B - 应用卡顿处理方法、装置、设备、存储介质和程序产品 - Google Patents
应用卡顿处理方法、装置、设备、存储介质和程序产品 Download PDFInfo
- Publication number
- CN113806183B CN113806183B CN202111171533.2A CN202111171533A CN113806183B CN 113806183 B CN113806183 B CN 113806183B CN 202111171533 A CN202111171533 A CN 202111171533A CN 113806183 B CN113806183 B CN 113806183B
- Authority
- CN
- China
- Prior art keywords
- jamming
- time
- preset
- thread
- application
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 24
- 238000000034 method Methods 0.000 claims abstract description 124
- 230000006870 function Effects 0.000 claims abstract description 112
- 238000004458 analytical method Methods 0.000 claims abstract description 80
- 230000000903 blocking effect Effects 0.000 claims abstract description 46
- 230000003993 interaction Effects 0.000 claims description 72
- 238000011084 recovery Methods 0.000 claims description 30
- 230000000694 effects Effects 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 21
- 238000012216 screening Methods 0.000 claims description 17
- 230000002452 interceptive effect Effects 0.000 claims description 12
- 230000008859 change Effects 0.000 claims description 10
- 238000007639 printing Methods 0.000 claims description 8
- 238000004064 recycling Methods 0.000 claims description 6
- NFEIBWMZVIVJLQ-UHFFFAOYSA-N mexiletine hydrochloride Chemical compound [Cl-].CC([NH3+])COC1=C(C)C=CC=C1C NFEIBWMZVIVJLQ-UHFFFAOYSA-N 0.000 claims description 3
- 238000000605 extraction Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 abstract description 24
- 238000001514 detection method Methods 0.000 abstract description 13
- 238000012544 monitoring process Methods 0.000 abstract description 11
- 238000005516 engineering process Methods 0.000 abstract description 5
- 238000013473 artificial intelligence Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 15
- 230000008569 process Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 238000005316 response function Methods 0.000 description 4
- 239000000725 suspension Substances 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000009877 rendering Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000009545 invasion Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011897 real-time detection Methods 0.000 description 1
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/3055—Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3072—Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及一种应用卡顿处理方法、装置、设备、存储介质和程序产品。所述方法可应用于云技术、人工智能、智慧交通和辅助驾驶等各种场景,包括:获取相邻两次的***绘制帧回调函数的回调间隔时间,当检测到回调间隔时间达到预设间隔阈值时,确定存在卡顿。获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点。采用本方法能够根据***绘制帧回调函数直接确定是否存在卡顿情况,而无需额外的检测工具或者设置相应的监控消息队列,可减少性能消耗,避免对实际运行的组件耗时造成影响,通过对应用卡顿数据进行进一步分析可准确确定出卡顿点,以便及时解决卡顿问题,进而提升卡顿处理效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种应用卡顿处理方法、装置、设备、存储介质和程序产品。
背景技术
随着计算机技术的发展,以及各类应用程序的逐步推广应用,终端设备安装的应用程序也日益增加,而常用的终端设备的存储空间或者运行内存有限,容易出现由于应用程序过多导致卡顿的情况出现。为保证用户在对终端设备或各应用程序的流畅使用,减少卡顿情况,需要在开发或维护阶段对应用程序的具体卡顿原因进行分析,并及时解决卡顿情况。
为对应用程序进行卡顿检测和排查,出现了TraceView工具,通过利用AndroidRuntime 函数调用的 event 事件,将函数运行的耗时和调用关系写入 trace 文件中,并对该trace文件进行跟踪和调用。而通过获取所有函数的调用过程,并分析这段时间内的函数调用流程,可确定存在可能存在卡顿的可疑点。但TraceView工具本身带来的性能开销过大,对函数调用的耗时造成影响,进而存在无法反映函数调用过程中真实耗时情况的问题。
因此,现有的卡顿检测工具,仍存在本身性能开销过大,导致无法准确反馈应用程序的不同函数在调用过程中的资源消耗情况,进而也无法精准定位到具体卡顿位置,导致卡顿处理效率仍然较为低下。
发明内容
基于此,有必要针对上述技术问题,提供一种能够准确确定出具体卡顿位置,进而提升卡顿处理效率的应用卡顿处理方法、装置、设备、存储介质和程序产品。
一种应用卡顿检测方法,所述方法包括:
获取相邻两次的***绘制帧回调函数的回调间隔时间;
当检测到所述回调间隔时间达到预设间隔阈值时,确定存在卡顿;
获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点。
一种应用卡顿处理装置,所述装置包括:
回调间隔时间获取模块,用于获取相邻两次的***绘制帧回调函数的回调间隔时间;
卡顿判定模块,用于当检测到所述回调间隔时间达到预设间隔阈值时,确定存在卡顿;
卡顿点确定模块,用于获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取相邻两次的***绘制帧回调函数的回调间隔时间;
当检测到所述回调间隔时间达到预设间隔阈值时,确定存在卡顿;
获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取相邻两次的***绘制帧回调函数的回调间隔时间;
当检测到所述回调间隔时间达到预设间隔阈值时,确定存在卡顿;
获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点。
一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取相邻两次的***绘制帧回调函数的回调间隔时间;
当检测到所述回调间隔时间达到预设间隔阈值时,确定存在卡顿;
获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点。
上述应用卡顿处理方法、装置、设备、存储介质和程序产品中,通过获取相邻两次的***绘制帧回调函数的回调间隔时间,并在检测到回调间隔时间达到预设间隔阈值时,确定存在卡顿,进而可通过获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点。实现了根据***绘制帧回调函数即可确定是否存在卡顿情况,而无需额外的检测工具或者设置相应的监控消息队列,可减少性能消耗,避免对应用程序内实际运行的组件的耗时造成影响,同时通过对与预设卡顿影响因素对应的应用卡顿数据进行进一步分析准确确定出卡顿点,以便及时解决卡顿问题,进而提升卡顿处理效率。
附图说明
图1为一个实施例中应用卡顿处理方法的流程示意图;
图2为一个实施例中应用卡顿处理方法的***绘制帧回调函数的回调间隔示意图;
图3为一个实施例中***绘制帧回调函数的回调间隔时间简图;
图4为一个实施例中应用卡顿处理方法的卡顿页面示意图;
图5为一个实施例中应用卡顿处理方法的卡顿提示信息示意图;
图6为一个实施例中获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点的流程示意图;
图7为一个实施例中堆栈采集示意图;
图8为一个实施例中重复堆栈抓取示意图;
图9为另一个实施例中获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点的流程示意图;
图10为一个实施例中确定相邻页面的页面加载时间的整体流程示意图;
图11为再一个实施例中获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点的流程示意图;
图12为一个实施例中确定内存泄漏的整体流程示意图;
图13为又一个实施例中获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点的流程示意图;
图14为一个实施例中线程监控示意图;
图15为另一个实施例中应用卡顿处理方法的流程示意图;
图16为一个实施例中应用卡顿处理方法的性能数据示意图;
图17为一个实施例中应用卡顿处理装置的结构框图;
图18为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种应用卡顿处理方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的***,并通过终端和服务器的交互实现。其中,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、便携式可穿戴设备、智能语音交互设备、智能家电以及车载终端等。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本发明实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等。本实施例中,该应用卡顿处理方法具体包括以下步骤:
步骤S102,获取相邻两次的***绘制帧回调函数的回调间隔时间。
具体地,可利用***帧刷新的回调接口,来获取相邻两次的***绘制帧回调函数的回调间隔时间。
其中,本实施例中的***可以是安卓***,而安卓***通过每隔预设时间发出VSYNC信号(帧同步信号),来通知界面的绘制帧进行重绘以及渲染等操作,且每次绘制帧进行重绘或者渲染操作时,需要触发***绘制帧回调函数进行回调,即触发FrameCallback函数(图形绘制回调函数)回调,进而可获取相邻两次的***绘制帧回调函数的回调时间,得到相邻两次的***绘制帧回调函数的回调间隔时间。其中,安卓***可每隔16ms发出VSYNC信号。
进一步地,如图2所示,提供了一种应用卡顿处理方法的***绘制帧回调函数的回调示意图,参照图2可知,display层(显示层)预先设置有标准***回调时间间隔,可以是***60帧时的回调时间间隔,其中,display层设置的标准回调时间间隔长度为16.6ms,CPU/GPU层(中央处理器/图形处理器层)对应设置有发生卡顿(即图2所标注的“jank!”用于表示发生卡顿)时的回调时间间隔。
其中,参照图2可知,当出现卡顿时,CPU/GPU层对应的回调时间间隔,大于display层设置的标准***回调时间间隔,即可以理解为相邻两次的***绘制帧回调函数的回调时间,大于预设间隔阈值时,确定存在卡顿。
步骤S104,当检测到回调间隔时间达到预设间隔阈值时,确定存在卡顿。
具体地,通过获取预设间隔阈值,并将相邻两次的***绘制帧回调函数的回调间隔时间,和预设间隔阈值进行比对,当确定回调间隔时间达到预设间隔阈值时,则确定当前***存在卡顿。
其中,由于安卓***的SDK(软件开发工具包)预先设置有和回调接口对应的相关类,即Choreographer类(用于统一动画、输入和绘制时机的机制),以及相关回调函数,即FrameCallback函数。具体来说,可通过Choreographer类设置对应的FrameCallback函数,由于每一个***绘制帧对应该FrameCallback函数,进而可通过两次回调的时间,来确定相邻两次的***绘制帧回调函数的回调间隔时间,而当回调间隔时间达到预设间隔阈值时,确定存在卡顿。
在一个实施例中,如图3所示,提供了一种***绘制帧回调函数的回调间隔时间简图,参照图3可知,通过在相邻两次的***绘制帧回调函数之间设置间隔区域,用于表示回调函数的实际间隔时间,进而根据实际间隔时间来判定是否存在卡顿。
其中,如图3所示的相邻两次的***绘制帧回调函数的回调间隔,可通过计算第二次回调函数的调用时间点和第一次回调函数的调用时间点间的差值,即T2-T1来对间隔时间进行表示,其中T1表示第一次回调函数的调用时间点,T2表示第二次回调函数的调用时间点,后续其他回调函数的调用时间点可依次采用T3、T4、……、Tn等,来进行表示,相应的间隔时间的计算也与T2和T1之间的间隔时间的计算方式类似。
在一个实施例中,如图4所示,提供了一种应用卡顿处理方法的卡顿页面,参照图4可知,当检测到出现卡顿时,需要在***所安装的应用程序,比如即时通讯应用程序等的使用界面进行卡顿提示。具体来说,可在使用界面采用悬浮框的方式,展示卡顿提示,其中,卡顿提示采用圆形悬浮框的方式,在悬浮框内包含有CPU的占用情况、FPS值(即Frame persecond,每秒传输帧数)、卡顿时间长度、dalvik(虚拟内存)、native(原生内存)以及总体内存等信息。
进一步地,如图5所示,提供了一种应用卡顿处理方法的卡顿提示信息,参照图5可知,卡顿提示信息还可包括可用内存、总体内存、低内存临界、低内存、卡顿组件的卡顿时间(即图5中所示的BaseContentActivity(C):592ms),卡顿信息对应的卡顿列表、线程信息以及耗电分析等数据。其中,卡顿列表提供了多个卡顿组件的具体卡顿时间。
步骤S106,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点。
具体地,预设卡顿影响因素包括堆栈因素、时间因素、内存因素以及线程因素,与预设卡顿影响因素对应的应用卡顿数据,包括:与堆栈因素对应的卡顿堆栈、与时间因素对应的应用程序的相邻页面的页面加载时间、与内存因素对应的交互组件的回收情况、以及与线程因素对应的当前线程数量。
在一个实施例中,当预设卡顿影响因素为堆栈因素时,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点,包括:
调用预设堆栈捕获线程,在堆栈采集周期内获取主线程的堆栈数据;根据堆栈因素,对堆栈数据进行筛选和聚类,确定出在卡顿时间内重复率高于预设重复率阈值的卡顿堆栈;提取卡顿时间内所调用的各函数方法的耗时;筛选得到耗时符合卡顿判定要求的卡顿函数方法;根据卡顿函数方法和卡顿堆栈进行卡顿分析,确定对应的卡顿点。
在一个实施例中,当预设卡顿影响因素为时间因素时,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点,包括:
获取与时间因素对应的应用程序的相邻页面的页面加载时间;将页面加载时间和预设时间阈值进行比对;当确定页面加载时间超出预设时间阈值时,确定当前页面为卡顿点。
在一个实施例中,当预设卡顿影响因素为内存因素时,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点,包括:
当检测到调用与交互组件对应的活动终止方法,且检测到应用程序进入后台运行时,获取各交互组件的当前存储方式,并对当前存储方式为弱引用存储的交互组件进行回收;当检测到达到回收结束状态时,获取各交互组件的回收情况;根据各交互组件的回收情况进行卡顿分析,确定对应的卡顿点。
在一个实施例中,当预设卡顿影响因素为线程因素时,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点,包括:
获取与线程因素对应的当前线程数量,并将当前线程数量和预设线程数量阈值进行比对;当确定当前线程数量大于预设线程数量阈值时,打印当前线程列表;基于当前线程列表进行卡顿分析,确定出对应的卡顿点。
在一个实施例中,在获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点之后,还包括:
获取与卡顿点对应的属性信息,并根据属性信息确定出对应的卡顿原因;属性信息包括与卡顿点对应的执行代码。
具体地,当预设卡顿影响因素为堆栈因素时,通过获取与卡顿点对应的执行代码,并根据执行代码确定对应的卡顿原因。
同样地,当预设卡顿影响因素为时间因素时,获取与卡顿点对应的页面信息,并根据页面信息确定对应的卡顿原因。
在一个实施例中,当预设卡顿影响因素为内存因素时,获取残留的弱引用存储的交互组件的内存数据,并确定卡顿原因为内存泄漏。
在一个实施例中,当预设卡顿影响因素为线程因素时,基于当前线程列表和所确定出的出现卡顿的卡顿线程,确定对应卡顿线程出现卡顿的卡顿原因。
上述应用卡顿处理方法中,通过获取相邻两次的***绘制帧回调函数的回调间隔时间,并在检测到回调间隔时间达到预设间隔阈值时,确定存在卡顿,进而可通过获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点。实现了根据***绘制帧回调函数即可确定是否存在卡顿情况,而无需额外的检测工具或者设置相应的监控消息队列,可减少性能消耗,避免对应用程序内实际运行的组件的耗时造成影响,同时通过对与预设卡顿影响因素对应的应用卡顿数据进行进一步分析准确确定出卡顿点,以便及时解决卡顿问题,进而提升卡顿处理效率。
在一个实施例中,如图6所示,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点的步骤,具体包括:
步骤S602,调用预设堆栈捕获线程,在堆栈采集周期内获取主线程的堆栈数据。
具体地,根据预设间隔阈值,确定对应的堆栈采集数量和堆栈采集周期,进而调用预设堆栈捕获线程,在堆栈采集周期内,获取主线程对应堆栈采集数量的堆栈数据。
其中,根据设置的预设间隔阈值来设置循环采集堆栈的间隔时间,即确定出堆栈采集周期,比如预设间隔阈值为500ms,堆栈采集周期为60ms。同时,还可根据设置的预设间隔阈值来确定出堆栈采集数量,比如预设间隔阈值为500ms,堆栈采集周期为60ms,相应设置的堆栈采集数量为5个堆栈。
进一步,如图7所示,提供了一种堆栈采集示示意图,参照图7可知,根据预设间隔阈值,针对主线程设置多个采集堆栈,调用预设堆栈捕获线程,在堆栈采集周期内,获取主线程的堆栈数据,其中主线程需要获取的堆栈数据的数量和堆栈数量相对应。
步骤S604,根据堆栈因素,对堆栈数据进行筛选和聚类,确定出在卡顿时间内重复率高于预设重复率阈值的卡顿堆栈。
具体地,根据堆栈因素,对所采集的主线程的堆栈数据进行哈希筛选和聚类处理,将堆栈数据去重归类,可通过获取预设重复率阈值,并筛选出在卡顿时间内重复率高于预设重复率阈值的卡顿堆栈。
其中,具体可以是在进行哈希处理并存储后,可以获知各个堆栈内的具体内容,进而可根据具体堆栈内容进行比对,确定出相同内容的堆栈,并统计相同内容的堆栈出现的次数,计算相同内容的堆栈的重复率,并将相同内容的堆栈的重复率和预设重复率阈值进行比对。当确定相同内容的堆栈的重复率大于预设重复率阈值时,可确定该堆栈即为卡顿堆栈。
在一个实施例中,如图8所示,提供了一种重复堆栈抓取示意图,参照图8可知,当前抓取的重复堆栈需要统计该堆栈的卡顿时间、堆栈次数、以及具体的卡顿组件,即如图8中所示的多个具体卡顿组件。其中,在重复堆栈抓取界面,同样设置有用于提示卡顿信息的悬浮框,框内包括有CPU的占用情况、FPS值(即Frame per second,每秒传输帧数)、卡顿时间长度、dalvik(虚拟内存)、native(原生内存)以及总体内存等信息。
步骤S606,提取卡顿时间内所调用的各函数方法的耗时。
具体地,通过在编译时,对所有函数的头尾***即时代码,则可在代码执行时,通过即时代码统计到每一个执行函数方法的具体耗时。具体来说,可通过在编译过程中对所有的函数方法进行插桩,在函数方法进入和函数方法结束的地方进行打点,即可在对性能影响较小的方式下统计到每个方法的耗时,而不会造成代码入侵的问题,进而具有较强兼容性。而在统计到每个函数方法的耗时数据后,通过UI界面(用户界面)来对各函数方法的耗时数据进行展示。
步骤S608,筛选得到耗时符合卡顿判定要求的卡顿函数方法。
具体地,通过获取与卡顿判定要求对应的方法耗时阈值,并将各函数方法的耗时和方法耗时阈值进行比对,筛选出符合卡顿判定要求的卡顿函数方法,即耗时满足方法耗时阈值的函数方法,确定为卡顿函数方法。
步骤S610,根据卡顿函数方法和卡顿堆栈进行卡顿分析,确定对应的卡顿点。
具体地,根据所确定出的卡顿函数方法和卡顿堆栈进行卡顿分析,其中,卡顿函数方法的耗时可以定位到具体耗时的函数方法,即可确定相应的函数方法为卡顿点,而通过筛选卡顿堆栈也可确定出卡顿堆栈对应的具体执行代码,基于执行代码进一步进行分析,确定相应的卡顿点。
在一个实施例中,根据卡顿函数方法和卡顿堆栈进行卡顿分析,确定对应的卡顿点,还包括:
获取与卡顿点对应的属性信息,并根据属性信息确定出对应的卡顿原因;属性信息包括与卡顿点对应的执行代码。
具体地,当预设卡顿影响因素为堆栈因素时,通过获取与卡顿点对应的执行代码,并根据执行代码确定对应的卡顿原因。
在一个实施例中,在根据卡顿函数方法和卡顿堆栈进行卡顿分析时,还可进行FPS值(即每秒传输帧数)的计算,基于所计算得到的FPS值,可确定***的应用程序的使用流畅程度。
本实施例中,通过调用预设堆栈捕获线程,在堆栈采集周期内获取主线程的堆栈数据,并根据堆栈因素,对堆栈数据进行筛选和聚类,确定出在卡顿时间内重复率高于预设重复率阈值的卡顿堆栈,进而通过提取卡顿时间内所调用的各函数方法的耗时,并筛选得到耗时符合卡顿判定要求的卡顿函数方法,从而可根据卡顿函数方法和卡顿堆栈进行卡顿分析,确定对应的卡顿点。实现了基于堆栈数据以及函数方法耗时进行卡顿分析,避免采用单一的卡顿分析依据,提升了卡顿分析所确定出的卡顿点的准确程度,以便后续进一步进行卡顿原因分析以及卡顿问题处理,提升卡顿处理处理效率。
在一个实施例中,如图9所示,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点的步骤,具体包括:
步骤S902,获取与时间因素对应的应用程序的相邻页面的页面加载时间。
具体地,当预设卡顿影响因素为时间因素时,获取与时间因素对应的应用程序的相邻页面的页面加载时间。其中,应用程序的相邻页面的页面加载时间用于判断应用程序的页面加载是否存在卡顿的问题。
其中,在根据堆栈因素以及卡顿堆栈并未确定相应的卡顿点,同时卡顿时间内所调用的各函数方法的耗时也均不符合卡顿判定要求时,进一步获取与时间因素对应的应用程序的相邻页面的页面加载时间,并根据页面记载时间和预设时间阈值,判定是否存在页面卡顿的问题。
在一个实施例中,获取与时间因素对应的应用程序的相邻页面的页面加载时间的步骤,具体包括:
获取应用程序的前一个页面组件的停顿周期时间点;
基于停顿周期时间点,触发页面加载时间的计时操作,直至检测到当前页面组件的视窗内焦点改变事件对应的回调函数时,停止页面加载时间的计时操作,得到应用程序的相邻页面的页面加载时间。
具体地,当进行应用程序的页面加载时,通过获取应用程序的前一个页面组件的停顿周期时间点,并基于该停顿周期时间点,触发页面加载时间的计时操作。
其中,在触发页面加载时间的计时操作后,针对当前页面,还需记录当前页面的消息响应函数的调用时间,并获取当前页面组件处于可交互状态周期的时间,直至检测到当前页面组件的视窗内焦点改变事件对应的回调函数时,停止页面加载时间的计时操作,得到应用程序的相邻页面的页面加载时间。
进一步地,应用程序的相邻页面的页面加载时间,即前一个页面和当前页面的页面加载时间具体可包括:从前一个页面组件的停顿周期时间点开始,历经当前页面的消息响应函数的调用时间,以及当前页面组件处于可交互状态周期的时间,直至检测到当前页面组件的视窗内焦点改变事件对应的回调函数,全程历经的时间,则可以确定为应用程序的相邻页面的页面加载时间。其中,当前页面组件的视窗内焦点改变事件完成回调后,即可确定当前页面加载完成。
在一个实施例中,如图10所示,提供了一种确定相邻页面的页面加载时间的整体流程,参照图10可知,页面进行加载时,通过获取上一个Activity onPause周期时间点,即上一个页面组件的停顿周期时间点,并依次记录当前Activity onCreate函数的调用时间,即当前页面组件的消息响应函数的调用时间,以及当前Activity onResume周期的时间长度,即当前页面组件处于可交互状态周期的时间长度,并实时监听前页面组件的onWindowFocusChange事件(视窗内焦点改变事件)的回调函数,直至检测到当前页面组件的视窗内焦点改变事件对应的回调函数时,统计得到应用程序的相邻页面的页面加载时间。
步骤S904,将页面加载时间和预设时间阈值进行比对。
具体地,通过获取预设时间阈值,并将时间阈值和所确定得到的页面加载时间进行对比,判断页面加载时间是否达到或超出预设时间阈值。其中,预设时间阈值可由***预设设置默认值,或者根据用户需求以及用户体验度等,对默认值进行调整或修改。
步骤S906,当确定页面加载时间超出预设时间阈值时,确定当前页面为卡顿点。
具体地,当页面加载时间超出预设时间阈值时,即应用程序相邻页面的页面加载时间大于可允许的预设时间阈值,会造成页面无法及时显示,存在页面切换卡顿,影响用户体验的问题,并将当前页面确定为卡顿点,以进行标注或提示,提醒工作人员及时解决卡顿问题。
在一个实施例中,在当确定页面加载时间超出预设时间阈值时,确定当前页面为卡顿点之后,还包括:
获取与卡顿点对应的属性信息,并根据属性信息确定出对应的卡顿原因。
具体地,当预设卡顿影响因素为时间因素时,获取与卡顿点对应的页面信息,并根据页面信息确定对应的卡顿原因。
其中,在确定当前页面为卡顿点后,获取当前页面的页面信息,当前页面组件的消息响应函数的调用时间对应的代码段,以及当前页面组件处于可交互状态周期时的代码段,并分析Activity onCreate 和Activity onResume对应的代码耗时问题。其中,页面加载时间主要由页面的复杂度,以及页面渲染速度决定。
本实施例中,通过获取与时间因素对应的应用程序的相邻页面的页面加载时间,并将页面加载时间和预设时间阈值进行比对,当确定页面加载时间超出预设时间阈值时,确定当前页面为卡顿点。实现了根据页面加载时间确定出存在卡顿的页面,而无需额外的检测工具,减少资源消耗的同时,提升了卡顿分析所确定出的卡顿点的准确程度,并进一步提升卡顿处理处理效率。
在一个实施例中,如图11,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点的步骤,具体包括:
步骤S1102,当检测到调用与交互组件对应的活动终止方法,且检测到应用程序进入后台运行时,获取各交互组件的当前存储方式,并对当前存储方式为弱引用存储的交互组件进行回收。
具体地,Activity(交互组件)销毁时会调用onDestroy方法(活动终止方法),此时将交互组件以弱引用方式存储,而弱引用在***垃圾回收时一定会被回收。当检测到应用程序进入后台时,触发对交互组件的存储当时的检测和获取,以及对弱引用方式存储的交互组件进行垃圾回收。其中,与活动终止方法对应的交互组件的存储方式为弱引用存储。
进一步地,在触发对弱引用方式存储的交互组件进行垃圾回收操作后,还需进一步检测当前弱引用方式存储的交互组件是否都被回收,如有未被回收的,说明还有其他地方引用该交互组件,则表明存在内存泄漏的问题。
在一个实施中,在根据堆栈因素以及卡顿堆栈并未确定相应的卡顿点,同时卡顿时间内所调用的各函数方法的耗时也均不符合卡顿判定要求时,进一步获取各交互组件的当前存储方式,并对当前存储方式为弱引用存储的交互组件进行回收,并基于各交互组件的回收情况进行卡顿分析。
步骤S1104,当检测到达到回收结束状态时,获取各交互组件的回收情况。
具体地,当检测***执行垃圾回收操作后,达到回收结束状态时,重新获取各交互组件的回收情况,目的在于判断当前存储方式为弱引用存储的交互组件是否已全部回收完毕。
步骤S1106,根据各交互组件的回收情况进行卡顿分析,确定对应的卡顿点。
具体地,根据各交互组件的回收情况进行卡顿分析,即判断是否存在将残留的弱引用存储的交互组件。其中,当确定达到回收结束状态后,仍检测到弱引用存储的交互组件残留时,则表明当前还有其他地方引用该交互组件,则可确定存在内存泄漏的问题,确定出对应的卡顿点。
在一个实施例中,如图12所示,提供了一种确定内存泄漏的整体流程,参照图12可知,当进行内存泄漏检测时,首先需要检测Activity的onDestroy方法,即交互组件对应的活动终止方法,当检测到交互组件对应的活动终止方法,且检测到APP(应用程序)进入后台运行时,为各交互组件分配临时内存块,并记录各交互组件的当前存储方式。
其中,在记录各交互组件的当前存储方式后,还需对当前存储方式为弱引用存储的交互组件进行回收,并在确定回收结束后,进一步对弱引用存储的Activity进行残留检测,进而将残留的弱引用存储的交互组件确定为卡顿点。
在一个实施例中,在根据各交互组件的回收情况进行卡顿分析,确定对应的卡顿点之后,还包括:
获取与卡顿点对应的属性信息,并根据属性信息确定出对应的卡顿原因。
具体地,通过获取与弱引用存储的交互组件对应的属性信息,并根据所获取的属性信息提取对应的执行代码,基于执行代码和属性信息综合判定卡顿原因为内存泄漏,并且确定具体是哪个交互组件导致的内存泄漏。
本实施例中,当检测到调用与交互组件对应的活动终止方法,且检测到应用程序进入后台运行时,获取各交互组件的当前存储方式,并对当前存储方式为弱引用存储的交互组件进行回收。而当检测到达到回收结束状态时,获取各交互组件的回收情况,并根据各交互组件的回收情况进行卡顿分析,进而将残留的弱引用存储的交互组件确定为卡顿点。实现了对当前交互组件的回收情况进行卡顿分析,可将残留的弱引用存储的交互组件确定为卡顿点,以准确确定出具体卡顿点,提升了卡顿分析所确定出的卡顿点的准确程度,并进一步提升卡顿处理处理效率。
在一个实施例中,如图13所示,获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点的步骤,具体包括:
步骤S1302,获取与线程因素对应的当前线程数量,并将当前线程数量和预设线程数量阈值进行比对。
具体地,通过获取与线程因素对应的当前线程数量,即获取当前卡顿时间内的当前线程数量,并获取预设线程数量阈值,并将当前线程数量和预设线程数量阈值进行比对,判断当前线程数量是否大于预设线程数量阈值。
其中,预设线程数量阈值可根据***本身的运行内存确定,或预先设置默认值,也可根据实际应用场景进行调整和修改,比如应用程序进行简单消息接收或发送时,应用程序进行视频播放或者语音通话时,相应的预设线程数量阈值有所不同。其中,应用程序进行视频播放或语音通话时的预设线程数量阈值,小于应用程序进行简单消息接收或发送时的预设线程数量阈值。
在一个实施例中,在根据堆栈因素以及卡顿堆栈并未确定相应的卡顿点,同时卡顿时间内所调用的各函数方法的耗时也均不符合卡顿判定要求时,进一步获取与线程因素对应的当前线程数量,并将当前线程数量和预设线程数量阈值进行比对,确定出相应的卡顿点。
步骤S1304,当确定当前线程数量大于预设线程数量阈值时,打印当前线程列表。
具体地,当确定当前线程数量大于预设线程数量阈值时,即***当前线程数量超出可允许的预设线程数量阈值时,会出现由于大量线程同时运行导致内存不合理占用以及应用程序或***异常的问题。
进一步地,由于当前线程数量大于预设线程数量阈值,进而需要对当前线程列表进行打印,以对当前线程列表中的各线程进行进一步卡顿分析。
步骤S1306,基于当前线程列表进行卡顿分析,确定出对应的卡顿点。
具体地,通过获取当前线程列表,以及线程列表中各线程对应的线程信息、各线程所占用的内存信息,并基于当前线程列表、线程列表中各线程对应的线程信息以及各线程所占用的内存信息进行卡顿分析,确定出对应的卡顿点,即具体确定出内存占据超出预设存储阈值的线程,确定为卡顿点。
在一个实施例中,如图14所示,提供了一种线程监控示意图,参照图14可知,线程监控可包括对当前线程的数量以及具体线程信息进行监控,同时由于大量线程同时运行容易造成内存不合理占用的问题,进而还需对各线程所占用的内存以及相应的内存信息进行实时检测。其中,在打印当前线程列表时,也需打印相应具体线程信息和内存信息,以便进行综合分析,准确确定出相应的卡顿点。
在一个实施例中,在基于当前线程列表进行卡顿分析,确定出对应的卡顿点之后,还包括:
获取与卡顿点对应的属性信息,并根据属性信息确定出对应的卡顿原因。
具体地,当预设卡顿影响因素为线程因素时,基于当前线程列表和所确定出的出现卡顿的卡顿线程,并获取卡顿线程的线程信息以及内存信息,进一步进行卡顿原因分析,确定出卡顿线程出现卡顿的卡顿原因。
本实施例中,获取与线程因素对应的当前线程数量,并将当前线程数量和预设线程数量阈值进行比对,当确定当前线程数量大于预设线程数量阈值时,打印当前线程列表,并基于当前线程列表进行卡顿分析,确定出对应的卡顿点。实现了根据当前线程数量以及相应的预设线程数量阈值,确定出卡顿线程,以便后续及时对卡顿线程进行监控和卡顿问题处理,提升卡顿处理效率。
在一个实施例中,如图15所示,提供了一种应用卡顿处理方法,该应用卡顿处理方法,具体包括以下步骤:
1)获取相邻两次的***绘制帧回调函数的回调间隔时间。
2)当检测到回调间隔时间达到预设间隔阈值时,确定存在卡顿。
执行步骤2)后,执行步骤3)至7),步骤3)调用预设堆栈捕获线程,在堆栈采集周期内获取主线程的堆栈数据。
4)根据堆栈因素,对堆栈数据进行筛选和聚类,确定出在卡顿时间内重复率高于预设重复率阈值的卡顿堆栈。
5)提取卡顿时间内所调用的各函数方法的耗时。
6)筛选得到耗时符合卡顿判定要求的卡顿函数方法。
7)根据卡顿函数方法和卡顿堆栈进行卡顿分析,确定对应的卡顿点。
执行步骤2)后,执行步骤8)至10),步骤8):获取与时间因素对应的应用程序的相邻页面的页面加载时间。
9)将页面加载时间和预设时间阈值进行比对。
10)当确定页面加载时间超出预设时间阈值时,确定当前页面为卡顿点。
执行步骤2)后,执行步骤11)至13),步骤11):当检测到调用与交互组件对应的活动终止方法,且检测到应用程序进入后台运行时,获取各交互组件的当前存储方式,并对当前存储方式为弱引用存储的交互组件进行回收。
12)当检测到达到回收结束状态时,获取各交互组件的回收情况。
13)根据各交互组件的回收情况进行卡顿分析,确定对应的卡顿点。
执行步骤2)后,执行步骤14)至16),步骤14):获取与线程因素对应的当前线程数量,并将当前线程数量和预设线程数量阈值进行比对。
15)当确定当前线程数量大于预设线程数量阈值时,打印当前线程列表。
16)基于当前线程列表进行卡顿分析,确定出对应的卡顿点。
执行步骤7)或步骤10)或步骤13)或步骤16)后,执行步骤17),步骤17):获取与卡顿点对应的属性信息,并根据属性信息确定出对应的卡顿原因。
在一个实施例中,如图16所示,提供了一种应用卡顿处理方法的性能数据示意图,参照图16可知,应用卡顿处理方法的性能数据可包括基础性能数据,以及App 性能数据,其中,基础性能数据可包括CPU、内存信息以及线程信息等,APP性能数据则包括卡顿监控数据、页面加载时间、内存泄漏情况、以及函数方法耗时等数据,基础性能数据是作为辅助信息来进行卡顿分析,APP性能数据则是主要的卡顿分析数据。
上述应用卡顿处理方法,实现了根据***绘制帧回调函数即可确定是否存在卡顿情况,而无需额外的检测工具或者设置相应的监控消息队列,可减少性能消耗,避免对应用程序内实际运行的组件的耗时造成影响,同时通过对与预设卡顿影响因素对应的应用卡顿数据,包括对卡顿堆栈、卡顿函数方法、页面加载时间、交互组件的回收情况以及当前线程列表等,进一步进行卡顿分析,准确确定出卡顿点,以及相应的卡顿原因,以便针对卡顿点和相应的卡顿原因,及时解决卡顿问题,进而提升卡顿处理效率。
应该理解的是,虽然上述实施例涉及的各流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述实施例涉及的各流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图17所示,提供了一种应用卡顿处理装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:回调间隔时间获取模块1702、卡顿判定模块1704以及卡顿点确定模块1706,其中:
回调间隔时间获取模块1702,用于获取相邻两次的***绘制帧回调函数的回调间隔时间。
卡顿判定模块1704,用于当检测到回调间隔时间达到预设间隔阈值时,确定存在卡顿。
卡顿点确定模块1706,用于获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点。
上述应用卡顿处理装置中,通过获取相邻两次的***绘制帧回调函数的回调间隔时间,并在检测到回调间隔时间达到预设间隔阈值时,确定存在卡顿,进而可通过获取与预设卡顿影响因素对应的应用卡顿数据,并基于应用卡顿数据进行卡顿分析,确定出对应的卡顿点。实现了根据***绘制帧回调函数即可确定是否存在卡顿情况,而无需额外的检测工具或者设置相应的监控消息队列,可减少性能消耗,避免对应用程序内实际运行的组件的耗时造成影响,同时通过对与预设卡顿影响因素对应的应用卡顿数据进行进一步分析准确确定出卡顿点,以便及时解决卡顿问题,进而提升卡顿处理效率。
在一个实施例中,卡顿点确定模块还包括:
堆栈数据采集模块,用于调用预设堆栈捕获线程,在堆栈采集周期内获取主线程的堆栈数据。
卡顿堆栈确定模块,用于根据堆栈因素,对堆栈数据进行筛选和聚类,确定出在卡顿时间内重复率高于预设重复率阈值的卡顿堆栈。
函数方法耗时提取模块,用于提取卡顿时间内所调用的各函数方法的耗时。
卡顿函数方法筛选模块,用于筛选得到耗时符合卡顿判定要求的卡顿函数方法。
第一卡顿分析模块,用于根据卡顿函数方法和卡顿堆栈进行卡顿分析,确定对应的卡顿点。
在一个实施例中,卡顿点确定模块还包括:
页面加载时间获取模块,用于获取与时间因素对应的应用程序的相邻页面的页面加载时间。第一比对模块,用于将页面加载时间和预设时间阈值进行比对。第四卡顿分析模块,用于当确定页面加载时间超出预设时间阈值时,确定当前页面为卡顿点。
在一个实施例中,卡顿点确定模块还包括:
交互组件回收模块,用于当检测到调用与交互组件对应的活动终止方法,且检测到应用程序进入后台运行时,获取各交互组件的当前存储方式,并对当前存储方式为弱引用存储的交互组件进行回收。
回收情况获取模块,用于当检测到达到回收结束状态时,获取各交互组件的回收情况。
第二卡顿分析模块,用于根据各交互组件的回收情况进行卡顿分析,并确定对应的卡顿点。
在一个实施例中,卡顿点确定模块还包括:
第二比对模块,用于获取与线程因素对应的当前线程数量,并将当前线程数量和预设线程数量阈值进行比对。
当前线程列表打印模块,用于当确定当前线程数量大于预设线程数量阈值时,打印当前线程列表。
第三卡顿分析模块,用于基于当前线程列表进行卡顿分析,确定出对应的卡顿点。
在一个实施例中,页面加载时间获取模块还用于:获取应用程序的前一个页面组件的停顿周期时间点;基于停顿周期时间点,触发页面加载时间的计时操作,直至检测到当前页面组件的视窗内焦点改变事件对应的回调函数时,停止页面加载时间的计时操作,得到应用程序的相邻页面的页面加载时间。
在一个实施例中,提供了一种应用卡顿处理装置,还包括卡顿原因分析模块,用于:获取与卡顿点对应的属性信息,并根据属性信息确定出对应的卡顿原因;属性信息包括与卡顿点对应的执行代码。
关于应用卡顿处理装置的具体限定可以参见上文中对于应用卡顿处理方法的限定,在此不再赘述。上述应用卡顿处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图18所示。该计算机设备包括通过***总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的数据库用于存储回调间隔时间、预设卡顿影响因素以及应用卡顿数据等。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种应用卡顿处理方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图18所示。该计算机设备包括通过***总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种应用卡顿数据方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图18中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (17)
1.一种应用卡顿处理方法,其特征在于,所述方法包括:
获取相邻两次的***绘制帧回调函数的回调间隔时间;
当检测到所述回调间隔时间达到预设间隔阈值时,确定存在卡顿;
获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点;
所述预设卡顿影响因素包括堆栈因素,与所述堆栈因素对应的所述应用卡顿数据包括卡顿堆栈;所述获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点,包括:
调用预设堆栈捕获线程,在堆栈采集周期内获取主线程的堆栈数据;根据所述堆栈因素,对所述堆栈数据进行筛选和聚类,确定出在卡顿时间内重复率高于预设重复率阈值的卡顿堆栈;提取所述卡顿时间内所调用的各函数方法的耗时;筛选得到所述耗时符合卡顿判定要求的卡顿函数方法;根据所述卡顿函数方法和所述卡顿堆栈进行卡顿分析,确定对应的卡顿点。
2.根据权利要求1所述的方法,其特征在于,所述预设卡顿影响因素还包括时间因素,与所述时间因素对应的所述应用卡顿数据包括应用程序的相邻页面的页面加载时间;所述获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点,包括:
获取与所述时间因素对应的应用程序的相邻页面的页面加载时间;
将所述页面加载时间和预设时间阈值进行比对;
当确定所述页面加载时间超出所述预设时间阈值时,确定当前页面为卡顿点。
3.根据权利要求1所述的方法,其特征在于,所述预设卡顿影响因素还包括内存因素,与所述内存因素对应的所述应用卡顿数据包括交互组件的回收情况;所述获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点,包括:
当检测到调用与交互组件对应的活动终止方法,且检测到应用程序进入后台运行时,获取各所述交互组件的当前存储方式,并对所述当前存储方式为弱引用存储的交互组件进行回收;所述活动终止方法表示销毁所述交互组件时调用的处理方法,所述弱引用存储的交互组件表示在***回收垃圾时会被回收的交互组件;
当检测到达到回收结束状态时,获取各所述交互组件的回收情况;
根据各所述交互组件的回收情况进行卡顿分析,确定对应的卡顿点。
4.根据权利要求2所述的方法,其特征在于,所述获取与所述时间因素对应的应用程序的相邻页面的页面加载时间,包括:
获取所述应用程序的前一个页面组件的停顿周期时间点;
基于所述停顿周期时间点,触发页面加载时间的计时操作,直至检测到当前页面组件的视窗内焦点改变事件对应的回调函数时,停止所述页面加载时间的计时操作,得到应用程序的相邻页面的页面加载时间。
5.根据权利要求1所述的方法,其特征在于,所述预设卡顿影响因素还包括线程因素,与所述线程因素对应的所述应用卡顿数据包括当前线程数量;所述获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点,包括:
获取与所述线程因素对应的当前线程数量,并将所述当前线程数量和预设线程数量阈值进行比对;
当确定所述当前线程数量大于所述预设线程数量阈值时,打印当前线程列表;
基于所述当前线程列表进行卡顿分析,确定出对应的卡顿点。
6.根据权利要求1至5任意一项所述的方法,其特征在于,所述方法还包括:
获取与所述卡顿点对应的属性信息,并根据所述属性信息确定出对应的卡顿原因;所述属性信息包括与所述卡顿点对应的执行代码。
7.根据权利要求6所述的方法,其特征在于,所述获取与所述卡顿点对应的属性信息,并根据所述属性信息确定出对应的卡顿原因,包括:
当预设卡顿影响因素为堆栈因素时,获取与卡顿点对应的执行代码,并根据执行代码确定对应的卡顿原因;
或当预设卡顿影响因素为时间因素时,获取与卡顿点对应的页面信息,并根据页面信息确定对应的卡顿原因;
或当预设卡顿影响因素为内存因素时,获取残留的弱引用存储的交互组件的内存数据,并确定卡顿原因为内存泄漏;所述弱引用存储的交互组件表示在***回收垃圾时会被回收的交互组件;
或当预设卡顿影响因素为线程因素时,基于当前线程列表和所确定出的出现卡顿的卡顿线程,确定对应卡顿线程出现卡顿的卡顿原因。
8.根据权利要求1所述的方法,其特征在于,所述筛选得到所述耗时符合卡顿判定要求的卡顿函数方法,包括:
获取与所述卡顿判定要求对应的方法耗时阈值,并将各函数方法的耗时和方法耗时阈值进行比对,将耗时满足所述方法耗时阈值的函数方法,确定为卡顿函数方法。
9.根据权利要求5所述的方法,其特征在于,所述基于所述当前线程列表进行卡顿分析,确定出对应的卡顿点,包括:
获取所述当前线程列表,以及线程列表中各线程对应的线程信息、各线程所占用的内存信息;
基于所述当前线程列表、所述线程列表中各线程对应的线程信息以及各线程所占用的内存信息进行卡顿分析,确定出内存占据超出预设存储阈值的线程,确定为卡顿点。
10.一种应用卡顿处理装置,其特征在于,所述装置包括:
回调间隔时间获取模块,用于获取相邻两次的***绘制帧回调函数的回调间隔时间;
卡顿判定模块,用于当检测到所述回调间隔时间达到预设间隔阈值时,确定存在卡顿;
卡顿点确定模块,用于获取与预设卡顿影响因素对应的应用卡顿数据,并基于所述应用卡顿数据进行卡顿分析,确定出对应的卡顿点;
所述预设卡顿影响因素包括堆栈因素,与所述堆栈因素对应的所述应用卡顿数据包括卡顿堆栈;所述卡顿点确定模块还包括:
堆栈数据采集模块,用于调用预设堆栈捕获线程,在堆栈采集周期内获取主线程的堆栈数据;
卡顿堆栈确定模块,用于根据所述堆栈因素,对所述堆栈数据进行筛选和聚类,确定出在卡顿时间内重复率高于预设重复率阈值的卡顿堆栈;
函数方法耗时提取模块,用于提取所述卡顿时间内所调用的各函数方法的耗时;
卡顿函数方法筛选模块,用于筛选得到所述耗时符合卡顿判定要求的卡顿函数方法;
第一卡顿分析模块,用于根据所述卡顿函数方法和所述卡顿堆栈进行卡顿分析,确定对应的卡顿点。
11.根据权利要求10所述的装置,其特征在于,所述预设卡顿影响因素还包括时间因素,与所述时间因素对应的所述应用卡顿数据包括应用程序的相邻页面的页面加载时间;所述卡顿点确定模块还包括:
页面加载时间获取模块,用于获取与所述时间因素对应的应用程序的相邻页面的页面加载时间;
第一比对模块,用于将所述页面加载时间和预设时间阈值进行比对;
第四卡顿分析模块,用于当确定所述页面加载时间超出所述预设时间阈值时,确定当前页面为卡顿点。
12.根据权利要求10所述的装置,其特征在于,所述预设卡顿影响因素还包括内存因素,与所述内存因素对应的所述应用卡顿数据包括交互组件的回收情况;所述卡顿点确定模块还包括:
交互组件回收模块,用于当检测到调用与交互组件对应的活动终止方法,且检测到应用程序进入后台运行时,获取各所述交互组件的当前存储方式,并对所述当前存储方式为弱引用存储的交互组件进行回收;所述活动终止方法表示销毁所述交互组件时调用的处理方法,所述弱引用存储的交互组件表示在***回收垃圾时会被回收的交互组件;
回收情况获取模块,用于当检测到达到回收结束状态时,获取各所述交互组件的回收情况;
第二卡顿分析模块,用于根据各所述交互组件的回收情况进行卡顿分析,确定对应的卡顿点。
13.根据权利要求11所述的装置,其特征在于,所述页面加载时间获取模块,还用于:
获取所述应用程序的前一个页面组件的停顿周期时间点;基于所述停顿周期时间点,触发页面加载时间的计时操作,直至检测到当前页面组件的视窗内焦点改变事件对应的回调函数时,停止所述页面加载时间的计时操作,得到应用程序的相邻页面的页面加载时间。
14.根据权利要求10所述的装置,其特征在于,所述预设卡顿影响因素还包括线程因素,与所述线程因素对应的所述应用卡顿数据包括当前线程数量;所述卡顿点确定模块还包括:
第二比对模块,用于获取与所述线程因素对应的当前线程数量,并将所述当前线程数量和预设线程数量阈值进行比对;
当前线程列表打印模块,用于当确定所述当前线程数量大于所述预设线程数量阈值时,打印当前线程列表;
第三卡顿分析模块,用于基于所述当前线程列表进行卡顿分析,确定出对应的卡顿点。
15.根据权利要求10至14任一项所述的装置,其特征在于,还包括卡顿原因分析模块,用于:获取与所述卡顿点对应的属性信息,并根据所述属性信息确定出对应的卡顿原因;所述属性信息包括与所述卡顿点对应的执行代码。
16.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述的方法的步骤。
17.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111171533.2A CN113806183B (zh) | 2021-10-08 | 2021-10-08 | 应用卡顿处理方法、装置、设备、存储介质和程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111171533.2A CN113806183B (zh) | 2021-10-08 | 2021-10-08 | 应用卡顿处理方法、装置、设备、存储介质和程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113806183A CN113806183A (zh) | 2021-12-17 |
CN113806183B true CN113806183B (zh) | 2023-11-07 |
Family
ID=78939296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111171533.2A Active CN113806183B (zh) | 2021-10-08 | 2021-10-08 | 应用卡顿处理方法、装置、设备、存储介质和程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113806183B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579173B (zh) * | 2022-05-05 | 2022-07-12 | 中科云策(深圳)科技成果转化信息技术有限公司 | 一种基于互联网信息技术的管理软件安全维护*** |
CN116610479A (zh) * | 2023-05-15 | 2023-08-18 | 成都赛力斯科技有限公司 | 一种自动监测故障方法、装置、电子设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108512695A (zh) * | 2018-03-12 | 2018-09-07 | 腾讯音乐娱乐科技(深圳)有限公司 | 监控应用卡顿的方法及装置 |
CN112100035A (zh) * | 2020-10-27 | 2020-12-18 | 苏州浪潮智能科技有限公司 | 一种页面异常检测方法、***及相关装置 |
US20210273891A1 (en) * | 2020-03-02 | 2021-09-02 | Arista Networks, Inc. | Networking System Having Multiple Components with Multiple Loci of Control |
-
2021
- 2021-10-08 CN CN202111171533.2A patent/CN113806183B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108512695A (zh) * | 2018-03-12 | 2018-09-07 | 腾讯音乐娱乐科技(深圳)有限公司 | 监控应用卡顿的方法及装置 |
US20210273891A1 (en) * | 2020-03-02 | 2021-09-02 | Arista Networks, Inc. | Networking System Having Multiple Components with Multiple Loci of Control |
CN112100035A (zh) * | 2020-10-27 | 2020-12-18 | 苏州浪潮智能科技有限公司 | 一种页面异常检测方法、***及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113806183A (zh) | 2021-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113806183B (zh) | 应用卡顿处理方法、装置、设备、存储介质和程序产品 | |
CN108763012B (zh) | 卡顿信息获取方法、装置及终端 | |
EP2763034B1 (en) | Method and device for image-capturing application screen for use in mobile terminal | |
CN106681811B (zh) | 基于线程池的多线程调度方法及装置 | |
CN107273130B (zh) | 加速界面绘制的方法、装置和终端 | |
CN101819510A (zh) | 自刷新显示功能的控制技术 | |
CN106557426B (zh) | 一种用于分析Android端应用运行流畅度的方法和*** | |
CN108446199A (zh) | 一种应用卡顿的检测方法及装置 | |
CN106776342B (zh) | 一种对移动应用的内存对象进行分析的方法和装置 | |
CN106997316A (zh) | 内存异常增长的检测***及方法 | |
CN116089096A (zh) | 负载资源调度方法及电子设备 | |
CN110851294B (zh) | 一种程序运行崩溃补救的方法及装置 | |
CN110796039B (zh) | 一种面部瑕疵检测方法、装置、电子设备及存储介质 | |
CN108415765B (zh) | 任务调度方法、装置及智能终端 | |
CN114416320A (zh) | 一种任务处理方法、装置、设备以及存储介质 | |
CN111966603B (zh) | 内存泄露的检测方法及装置、可读存储介质及电子设备 | |
US11586983B2 (en) | Data processing system and method for acquiring data for training a machine learning model for use in monitoring the data processing system for anomalies | |
CN103577304A (zh) | 一种代码动态分析的方法及装置 | |
CN107562260B (zh) | 一种触摸控制的方法及装置 | |
CN110750346A (zh) | 任务运行优化方法、装置、终端及存储介质 | |
CN107688517A (zh) | Wpf程序卡顿检测方法和装置 | |
CN106326049B (zh) | 一种故障定位方法及终端 | |
CN114020717A (zh) | 分布式存储***的性能数据获取方法、装置、设备及介质 | |
CN113535029A (zh) | 操作录制方法、终端、计算机设备及计算机可读存储介质 | |
CN110908866A (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 |