CN108572906A - Anr实时监控方法、装置、终端和存储介质 - Google Patents

Anr实时监控方法、装置、终端和存储介质 Download PDF

Info

Publication number
CN108572906A
CN108572906A CN201810370705.0A CN201810370705A CN108572906A CN 108572906 A CN108572906 A CN 108572906A CN 201810370705 A CN201810370705 A CN 201810370705A CN 108572906 A CN108572906 A CN 108572906A
Authority
CN
China
Prior art keywords
anr
main thread
information
time
interface
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
Application number
CN201810370705.0A
Other languages
English (en)
Inventor
涂勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Guangzhou Youshi Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangzhou Youshi Network Technology Co Ltd filed Critical Guangzhou Youshi Network Technology Co Ltd
Priority to CN201810370705.0A priority Critical patent/CN108572906A/zh
Publication of CN108572906A publication Critical patent/CN108572906A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Abstract

本发明提供一种ANR实时监控方法,包括以下步骤:在待检测应用程序的主线程中启动接口;从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR;在确定所述主线程发生ANR时,获取所述主线程的信息;根据所述主线程的信息,形成ANR关键信息;将所述ANR关键信息上传系统。通过本发明技术方案的实施,通过实时主动监控ANR,解决了由于ANR问题无法实时收集反馈,导致无法还原和修复的问题。本发明还提供了一种ANR实时监控装置、终端和存储介质。

Description

ANR实时监控方法、装置、终端和存储介质
技术领域
本发明涉及计算机技术领域,具体而言,本发明涉及一种ANR实时监控方法、装置、终端和存储介质。
背景技术
在安卓系统上,当用户的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,或选择“强制关闭”而让程序停止运行。对此,一个流畅的合理的应用程序中不能出现ANR的问题,而让用户每次处理应用程序无响应对话框。因此,要保证系统不会向用户显示ANR问题,应用程序的设计中响应性能的设计尤为重要。但是安卓系统的开发中系统框架并未提供接口监听ANR发生的时间节点,而仅在本机“/data/anr/”目录下生成一个类似traces.txt文件,导致很多线上ANR问题无法实时采集反馈处理,最终使得ANR问题无法还原和修复,用户体验不佳。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的ANR实时监控方法、装置、终端和存储介质。
第一方面,本发明提供一种ANR实时监控方法,包括以下步骤:
在待检测应用程序的主线程中启动接口;
从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR;
在确定所述主线程发生ANR时,获取所述主线程的信息;
根据所述主线程的信息,形成ANR关键信息;
将所述ANR关键信息上传系统。
结合第一方面,本发明在第一方面的第一种实施方式中,所述在待检测应用程序的主线程中启动接口,包括以下步骤:
在待检测应用程序的主线程中启动Runnable接口;
采用消息回调机制,调用子线程向主线程发送消息。
结合第一方面的第一种实施方式,本发明在第一方面的第二种实施方式中,所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR,包括以下步骤:
设置计数器在所述接口接收到消息回调信息时加1;
从所述启动接口的时间点起,经过预设时间后,判断当前计数器的计数值是否有所变化,若否,确定所述主线程发生ANR。
结合第一方面或结合第一方面的第二种实施方式,本发明在第一方面的第三种实施方式中,所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR,还包括以下步骤:
若是,返回继续所述在待检测应用程序的主线程中启动接口的步骤。
结合第一方面,本发明在第一方面的第四种实施方式中,所述在确定所述主线程发生ANR时,获取所述主线程的信息,包括以下步骤:
在发生ANR的时间点,调用子线程收集当前所述主线程的信息。
结合第一方面,本发明在第一方面的第五种实施方式中,所述根据所述主线程的信息,形成ANR关键信息,包括以下步骤:
根据所述主线程的信息中的记录信息,筛选出导致ANR的信息;
将所述导致ANR的信息输出形成字符串形式的ANR关键信息。
结合第一方面,本发明在第一方面的第六种实施方式中,所述将所述ANR关键信息上传系统,包括以下步骤:
通过开发者集成的日志上传系统将所述ANR关键信息上传至服务器。
结合第一方面,本发明在第一方面的第七种实施方式中,所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息,包括以下步骤:
检测CPU占用率;
若CPU占用率在预设阈值范围内,将预定时长作为当前预设时间;
若CPU占用率超出预设阈值范围,根据预设规则加长或缩短预定时长,将调整后的预定时长作为当前预设时间;
确认本次所述启动接口的时间点距离当前时间的时长到达所述当前预设时间,检测所述接口是否接收到消息回调信息。
第二方面,本发明提供一种ANR实时监控装置,包括以下模块:
启动模块,用于在待检测应用程序的主线程中启动接口;
确定模块,用于从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR;
获取模块,用于在确定所述主线程发生ANR时,获取所述主线程的信息;
筛选模块,用于根据所述主线程的信息,形成ANR关键信息;
上传模块,用于将所述ANR关键信息上传系统。
结合第二方面,本发明在第二方面的第一种实施方式中,所述启动模块,包括以下单元:
启动单元,用于在待检测应用程序的主线程中启动Runnable接口;
调用单元,用于采用消息回调机制,调用子线程向主线程发送消息。
结合第二方面的第一种实施方式,本发明在第二方面的第二种实施方式中,所述确定模块,包括以下单元:
计数单元,用于设置计数器在所述接口接收到消息回调信息时加1;
判断单元,用于从所述启动接口的时间点起,经过预设时间后,判断当前计数器的计数值是否有所变化,若否,确定所述主线程发生ANR。
结合第二方面或结合第二方面的第二种实施方式,本发明在第二方面的第三种实施方式中,所述确定模块,还包括以下单元:
循环单元,用于在判断出当前计数器的计数值有变化时,返回继续所述在待检测应用程序的主线程中启动接口的操作。
结合第二方面,本发明在第二方面的第四种实施方式中,所述获取模块,包括以下单元:
收集单元,用于在发生ANR的时间点,调用子线程收集当前所述主线程的信息。
结合第二方面,本发明在第二方面的第五种实施方式中,所述筛选模块,包括以下单元:
筛选单元,用于根据所述主线程的信息中的记录信息,筛选出导致ANR的信息;
输出单元,用于将所述导致ANR的信息输出形成字符串形式的ANR关键信息。
结合第二方面,本发明在第二方面的第六种实施方式中,所述上传模块,还用于:
通过开发者集成的日志上传系统将所述ANR关键信息上传至服务器。
结合第二方面,本发明在第二方面的第七种实施方式中,所述确定模块,包括以下单元:
第一检测单元,用于检测CPU占用率;
第一调整单元,用于若CPU占用率在预设阈值范围内,将预定时长作为当前预设时间;
第二调整单元,若CPU占用率超出预设阈值范围,根据预设规则加长或缩短预定时长,将调整后的预定时长作为当前预设时间;
第二检测单元,用于确认本次所述启动接口的时间点距离当前时间的时长到达所述当前预设时间,检测所述接口是否接收到消息回调信息。
第三方面,本发明提供一种终端,其包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据第一方面所述的ANR实时监控方法。
第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现第一方面所述的ANR实时监控方法。
区别于现有技术,本发明具有以下优势:
本发明提供的ANR实时监控方法、装置、终端和存储介质,通过在待检测应用程序的主线程中启动接口,并通过检测在所述启动接口的时间点起经过预设时间后所述接口是否接收到消息回调信息,以判断所述待检测应用程序的主线程是否发生ANR,当确定所述主线程发生ANR时,获取所述主线程的信息,根据所述主线程的信息形成ANR关键信息并上传系统待处理。在实施过程中,其涉及实时监控、信息采集、信息分析、上传ANR关键信息等几个步骤,实现主动地实时监控ANR发生的时间点,并且将导致ANR发生的关键线程调用链精准地上传系统待开发者处理。通过对ANR的实时监控,有效改善安卓系统中应用程序的ANR问题,优化了需要用户处理应用程序无响应对话框的操作,进一步提高了用户体验。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例一ANR实时监控方法的第一种方法流程图;
图2为本发明实施例一ANR实时监控方法的第二种方法流程图;
图3为本发明实施例一ANR实时监控方法的第三种方法流程图;
图4为本发明实施例一ANR实时监控方法的第四种方法流程图;
图5为本发明实施例二ANR实时监控方法的方法流程图;
图6为本发明实施例三ANR实时监控装置的第一种模块框图;
图7为本发明实施例三ANR实时监控装置的第二种模块框图;
图8为本发明实施例三ANR实时监控装置的第三种模块框图;
图9为本发明实施例三ANR实时监控装置的第四种模块框图;
图10为本发明实施例三ANR实时监控装置的第五种模块框图;
图11为本发明实施例三ANR实时监控装置的第六种模块框图;
图12为本发明实施例四的终端结构框图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
其中,下面给出涉及本发明的部分词语解释:
主线程:当一个程序启动时,就有一个进程被操作系统创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程(Main Thread),因为该线程是在程序启动开始时执行的。如果需要再创建线程,那么创建的线程就是这个主线程的子线程,每个进程至少有一个主线程。主线程的结束,意味着整个进程的结束,所有的其他线程都会退出。主线程的特征包括:是产生其他子线程的线程;主线程中执行程序的控制;通常主线程必须最后完成执行,执行各种关闭动作。
ANR:Application Not Responding,是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间未能得到有效响应或响应时间过程,均会造成ANR。
下面结合附图对本发明提供的ANR实时监控方法、装置、终端和存储介质的具体实施方式进行详细介绍。在此,本发明的示意性实施例及其说明用于解释本发明,但不作为对本发明的限定。
实施例一
结合图1,本发明实施提供一种ANR实时监控方法,主要应用于安卓系统,包括以下步骤:
S01在待检测应用程序的主线程中启动接口;
其中,所述待检测应用程序为当前系统中已安装的应用程序;所述待检测应用程序的主线程为所述待检测应用程序在运行时,创建的线程;具体地,在本发明实施例中,启动接口用于模拟线程操作,所述模拟线程操作在本发明实施例中,优选为模拟处理耗时的操作。亦即,步骤S01具体的步骤为在待检测应用程序的主线程中启动接口开启线程模拟处理耗时的操作。但需要说明的是,该接口在实际操作中,可不仅用于模拟线程操作,其还可用于在待检测应用程序中调用其他线程的操作,亦即,所述接口用于模拟线程操作不应作为对本发明保护范围的限定。
进一步地,结合图2,步骤S01,所述在待检测应用程序的主线程中启动接口,包括以下步骤:
S011在待检测应用程序的主线程中启动Runnable接口;
S012采用消息回调机制,调用子线程向主线程发送消息。
因为Android中的线程源自于Java,而Java开发中,实现多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口。在本实施例中,采用实现Runnable接口的方式,其中,启动接口的数量为至少一个,该启动接口的数量不应作为对本发明保护范围的限定。
具体地,Runnable只是一个接口,在Runnable接口里面只有一个run()方法,没有start()方法,所以在所述主线程中启动Runnable接口必须依托其他类。优选地,本发明实施例中,可以通过Thread类来启动Runnable接口。启动的Runnable接口在所述主线程中执行,并采用消息回调机制,调用至少一个子线程向所述主线程发送消息。其中,所述消息回调机制是一种双向调用模式,当被调用方在被调用时,也会调用对方;对此,在本发明实施例中,所述主线程中启动Runnable接口调用了子线程向所述主线程发送消息,同样的,若所述主线程会在执行Runnable接口模拟的线程操作后,向子线程发送消息;亦即相当于所述主线程启动的Runnable接口模拟的线程操作,在得到成功执行后,将获得消息回调信息。
S02从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR;
其中,所述预设时间可以根据实际情况进行配置,在本发明实施例中优选为5s。
进一步地,结合图3,步骤S02,所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR,包括以下步骤:
S021设置计数器在所述接口接收到消息回调信息时加1;
S022从所述启动接口的时间点起,经过预设时间后,判断当前计数器的计数值是否有所变化,若否,确定所述主线程发生ANR。
具体地,所述计数器用于在步骤S01中启动接口模拟线程操作时,当所述接口接收到消息回调信息时,加1。亦即,所述计数器在所述接口未接收到消息回调信息时,将不作任何操作。
其中,在本发明实施例中,通过计数器来检测判断所述主线程是否发生ANR为其中一种判断的方式,即通过计数器的计数结果更为直观地表征出所述主线程是否发生ANR。而计数器计数结果用以判断所述主线程是否发生ANR,其每一次的计数结果均进行单独判断。
具体地,结合图3,所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR,还包括以下步骤:
S023若是,返回继续所述在待检测应用程序的主线程中启动接口的步骤。
进一步地,结合本发明实施例中设计的在主线程中启动Runnable接口,其中以预设时间为5s为例进行详细解释,但该具体时间不作为对本发明实施例的限定。
假设待检测应用程序中已启动一个Runnable接口在主线程中模拟线程操作,此时将采用消息回调机制,调用子线程向主线程发送消息,并统计过设置计数器在Runnable接口接收到消息回调信息时加1。当启动Runnable接口的时间点起,经过5s后,将检测当前计数器的count值是否发生变化。如果5s过后,计数器count值发生变化(加1),说明Runnable接口已经在主线程中成功执行,代表待检测应用程序未发生ANR,此时将返回继续重复上述操作(重新启动Runnable接口);如果5s过后,计数器count值未发生变化(未加1),说明Runnable接口在预设时间内,即5s内,在主线程中并未成功执行,代表待检测应用程序的主线程发生ANR,此时将执行步骤S03。
S03在确定所述主线程发生ANR时,获取所述主线程的信息;
具体地,结合图4,步骤S03所述在确定所述主线程发生ANR时,获取所述主线程的信息,包括以下步骤:
S031在发生ANR的时间点,调用子线程收集当前所述主线程的信息;
其中,在本发明实施例中,在步骤S041中,调用的子线程与步骤S012中调用的子线程可为不同的子线程,其在各个操作步骤中,可通过调用不同的子线程来实现相应操作。
关于所述发生ANR的时间点,下述举例说明,假设预设时间为5s,即当前从0s开始,在待检测应用程序的主线程启动接口模拟操作并设置计数器计数,在5s过后,即第4s时,若Runnable接口在主线程中成功执行,Runnable接口接收到消息回调信息时,致使计数器count加1,判断为待检测应用程序未发生ANR;若第4s时,Runnable接口并未在主线程中执行,此时,Runnable接口将不会接收到消息回调信息,更不会致使计数器count加1,即此时计数器的数值并未发生变化,判断为待检测应用程序发生ANR,则此时第4s将为ANR触发的时间点,即本发明实施例中的发生ANR的时间点。
在安卓系统中,开启子线程的方式有多种,在本发明实施例中不对启动子线程的方式做限定。优选地,在本发明实施例中,调用一个子线程收集主线程信息。其中,获取主线程的信息(Thread.get Stack Trace())包括当前运行中的所有调用链信息,其中可能包括目前线程中运行待检测应用程序在运行到哪一代码中卡了(致使运行卡顿的操作事件在超过预定时间未能得到相应或响应时间过长),导致ANR发生的信息。
S04根据所述主线程的信息,形成ANR关键信息;
具体地,结合图4,步骤S04中,所述根据所述主线程的信息,形成ANR关键信息,包括以下步骤:
S041根据所述主线程的信息中的记录信息,筛选出导致ANR的信息;
考虑到可能由于正在运行的程序过多,使得当前获取到的主线程的信息过多,不利于在反馈ANR信息后开发者对ANR问题的处理和程序的修复,为了提高还原和修复程序的效率,本发明实施例还包括根据主线程信息中的记录信息,对获取的主线程的信息进行筛选,最终仅保留导致ANR的信息的步骤。优选地,根据主线程信息中的记录信息对收集的主线程的信息进行筛选获得导致ANR的信息是本发明实施例的优选方式,但与其等同的实施方式也应理解为本发明实施例所保护的范围。
进一步地,在同一预设时间下,即计数器同一次计数,同一次根据计数器计数结果判断是否发生ANR的情况下,有可能包括多条导致ANR的信息,即,筛选出来的导致ANR的信息可有多条。其中,筛选的过程中,主要为将与系统相关的堆栈信息过滤,并保留与待检测应用程序相关的堆栈信息。
S042将所述导致ANR的信息输出形成字符串形式的ANR关键信息。
考虑到所述导致ANR的信息需要上传系统时的传输效率及后续开发者分析导致ANR的信息的效率,将所述导致ANR的信息在终端上输出成字符串形式的ANR关键信息。
S05将所述ANR关键信息上传系统。
具体地,所述将所述ANR关键信息上传系统为将产生ANR问题的关键线程调用链信息回调给开发者处理。
具体地,步骤S05所述将所述ANR关键信息上传系统,包括以下步骤:
通过开发者集成的日志上传系统将ANR关键信息上传至服务器。
在本发明实施例中,优选将ANR关键信息上传至服务器,但其还可以上传至任何方便开发者处理的程序或计算机设备中,在此不应作为对本发明实施例的限定。
更进一步地,步骤S05中还包括向服务器发送异常信息的请求,该请求中携带有ANR关键信息。即把ANR问题当作请求发送至服务器。当异常信息(指ANR问题)发送到指定的服务器后,可跟踪用户使用应用程序的情况,更进一步利于开发者修改程序问题。
在本发明实施例中,其主要应用于已发布的应用程序中,即已投入使用的应用程序中;而对于未发布的程序,本发明实施例提供的方法可通过测试抓取Log来分析应用。
实施例二
结合图5,区别于实施例一,本发明实施例提供的一种ANR实时监控方法中,S02所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息,还包括以下步骤:
S51检测CPU占用率;
S52若CPU占用率在预设阈值范围内,将预定时长作为当前预设时间;
S53若CPU占用率超出预设阈值范围,根据预设规则加长或缩短预定时长,将调整后的预定时长作为当前预设时间;
S54确认所述启动接口的时间点距离当前时间的时长到达所述当前预设时间,检测所述接口是否接收到消息回调信息。
其中,在本发明实施例中,所述检测CPU占用率包括检测待检测应用程序和/或系统的CPU占用率。预定时长为标准时长,在本发明实施例中预先设定作为参考值,该预定时长可缩短,可加长,其具体根据预设规则进行调整。下述分情况详细解释:
检测系统自身的CPU占用率;
具体地,所述系统自身的CPU占用率为系统当前运行所需的CPU占用率,对应的,在本发明实施例中包括以下情况:
若CPU占用率在预设阈值范围内,将预定时长作为当前预设时间;若CPU占用率超出预设阈值范围,根据预设规则加长或缩短预定时长,将调整后的预定时长作为当前预设时间;
其中,优选地,缩短后的预定时长=预定时长*60%;加长后的预定时长=预定时长*200%。
具体地,举例说明,假设预定时长为5s、预设阈值范围为[30%,90%]、待检测应用程序的主线程中启动接口为Runnable接口。从时间为0s开始,将启动Runnable接口,此时,同时检测CPU占用率,并对应于以下三种情况中的一种:
(1)若检测出CPU占用率超出预设阈值范围,即小于30%或大于90%,则对预定时长进行缩短或加长。具体地,由于CPU占用率过高时,容易导致待检测应用程序发生ANR,此时若将缩短后的预定时长=5s*60%=3s,并将该缩短后的预定时长作为当前预设时间,即此时预设时间为3s,可更为精确地检测到ANR发生的时间点;此时若将加长后的预定时长=5s*200%=10s,并将该加长后的预定时长作为当前预设时间,有利于通过减缓检测的操作,降低CPU占用率,缓解ANR可能发生的情况。其具体设定缩短还是加长预定时长,可根据实际情况调整,在本发明实施例中,优选在CPU占用率过高时,即超出预设阈值范围为超出预设阈值的最大值时,将缩短后的预定时长作为当前预设时间。在此过程中,检测出CPU占用率超出预设阈值范围的最大值时,则缩短预定时长,即将预设时间从原来的5s缩短为小于5s,以更精确地监控到ANR发生的时间点,举例中假设此时将预设时间调整为3s,则此时若判断待检测应用程序未发生ANR,则下一次启动Runnable接口从第3s秒开始;若判断待检测应用程序发生ANR,则继续后续的步骤S03。进一步地,由于CPU占用率较低时,不容易导致待检测应用程序发生ANR,此时若将加长后的预定时长作为当前预设时间,即此时预设时间为10s,可降低启动Runnable接口的频率,可提高系统当前运行的流畅性;此时若将缩短后的预定时长作为当前预设时间,即此时预设时间为3s,可在不影响系统运行的情况下,更精确地监控到ANR发生的时间点。其具体设定缩短还是加长预定时长,可根据实际情况调整,在本发明实施例中,优选在CPU占用率较低时,即超出预设阈值范围为超出预设阈值的最小值时,将加长后的预定时长作为当前预设时间。在此过程中,检测出CPU占用率超出预设阈值范围的最小值,则加长预定时长,即将预设时间从原来的5s加长为大于5s,以减少系统的负担,举例中假设此时将预设时间调整为10s,则此时若判断待检测应用程序未发生ANR,则下一次启动Runnable接口从第10s秒开始;若判断待检测应用程序发生ANR,则继续后续的步骤S03。
(2)若检测出CPU占用率在预设阈值范围内,则保持预定时长不变,并将该预定时长作为当前预设时间,即此时预设时间为5s;由于安卓系统中对于一些事件需要在一定的时间范围内完成,在待检测应用程序在主线程中启动Runnable接口后,等待5s后,判断本次启动Runnable是否致计数器count加1,若此时计数器count加1,即待检测应用程序并未发生ANR,则从第5s开始下一次启动Runnable接口的步骤;若判断待检测应用程序发生ANR,则继续后续的步骤S03。
检测待检测应用程序及系统自身的CPU占用率;
具体地,在此情况中,即在上述实施例中检测系统自身的CPU占用率基础上,还包括步骤:
分析待检测应用程序的CPU占用率占系统自身的CPU占用率的百分比;
若待检测应用程序的CPU占用率占系统自身的CPU占用率的百分比达预设百分比,则缩短预定时长,并将缩短后的预定时长作为当前的预设时间。
具体地,在通过检测系统自身的CPU占用率,以调整预设时间时,还包括通过检测待检测应用程序运行过程中的CPU占用率占总CPU占用率的百分比,调整预设时间。即,假设预设百分比为50%,若待检测应用程序运行过程中的CPU占用率占总CPU占用率的60%时,则为超过预设百分比,将缩短预定时长,该缩短预定时长的方式与通过检测系统自身的CPU占用率,以调整预设时间的方式一致,即采用上述例子而言,此处缩短预定时长=5s*60%=3s,并将该缩短后的预定时长作为当前预设时间。
在本发明实施例中,通过检测出待检测应用程序的CPU占用率及系统自身的CPU占用率,以调整预设时间,可有效提高监控ANR发生时间点的精确度。
实施例三
结合图6,为了进一步对上述实施例所述的ANR实时监控方法进行阐述,对其进行模块化说明,提供ANR实时监控装置,其包括以下模块:
启动模块61,用于在待检测应用程序的主线程中启动接口;
确定模块62,用于从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR;
获取模块63,用于在确定所述主线程发生ANR时,获取所述主线程的信息;
筛选模块64,用于根据所述主线程的信息,形成ANR关键信息;
上传模块65,用于将所述ANR关键信息上传系统。
进一步地,结合图7,所述启动模块61,包括以下单元:
启动单元71,用于在待检测应用程序的主线程中启动Runnable接口;
调用单元72,用于采用消息回调机制,调用子线程向主线程发送消息。
进一步地,结合图8,所述确定模块62,包括以下单元:
计数单元81,用于设置计数器在所述接口接收到消息回调信息时加1;
判断单元82,用于从所述启动接口的时间点起,经过预设时间后,判断当前计数器的计数值是否有所变化,若否,确定所述主线程发生ANR。
更进一步地,所述确定模块62,还包括以下单元:
循环单元83,用于在判断出当前计数器的计数值有变化时,返回继续所述在待检测应用程序的主线程中启动接口的操作。
具体地,结合图9,所述获取模块63,包括以下单元:
收集单元91,用于在发生ANR的时间点,调用子线程收集当前所述主线程的信息。
其中,结合图10,所述筛选模块64,包括以下单元:
筛选单元101,用于根据所述主线程的信息中的记录信息,筛选出导致ANR的信息;
输出单元102,用于将所述导致ANR的信息输出形成字符串形式的ANR关键信息。
进一步地,所述上传模块65,还用于:
通过开发者集成的日志上传系统将所述ANR关键信息上传至服务器。
更进一步地,结合图11,所述确定模块62,还包括以下单元:
第一检测单元111,用于检测CPU占用率;
第一调整单元112,用于若CPU占用率在预设阈值范围内,将预定时长作为当前预设时间;
第二调整单元113,若CPU占用率超出预设阈值范围,根据预设规则加长或缩短预定时长,将调整后的预定时长作为当前预设时间;
第二检测单元114,用于确认本次所述启动接口的时间点距离当前时间的时长到达所述当前预设时间,检测所述接口是否接收到消息回调信息。
实施例四
本发明实施例还提供了ANR实时监控终端,如图12所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point of Sales,销售终端)、车载电脑等任意终端设备,以终端为手机为例:
图12示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图12,手机包括:射频(Radio Frequency,RF)电路1210、存储器1220、输入单元1230、显示单元1240、传感器1250、音频电路1260、无线保真(wireless fidelity,Wi-Fi)模块1270、处理器1280、以及电源1290等部件。本领域技术人员可以理解,图12中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图12对手机的各个构成部件进行具体的介绍:
RF电路1210可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1280处理;另外,将设计上行的数据发送给基站。通常,RF电路1210包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low NoiseAmplifier,LNA)、双工器等。此外,RF电路1210还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(GlobalSystem of Mobile communication,GSM)、通用分组无线服务(General Packet RadioService,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、长期演进(Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service,SMS)等。
存储器1220可用于存储软件程序以及模块,处理器1280通过运行存储在存储器1220的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1220可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声纹播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1220可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1230可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1230可包括触控面板1231以及其他输入设备1232。触控面板1231,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1231上或在触控面板1231附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板1231可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1280,并能接收处理器1280发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1231。除了触控面板1231,输入单元1230还可以包括其他输入设备1232。具体地,其他输入设备1232可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1240可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1240可包括显示面板1241,可选的,可以采用液晶显示器(LiquidCrystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板1241。进一步的,触控面板1231可覆盖显示面板1241,当触控面板1231检测到在其上或附近的触摸操作后,传送给处理器1280以确定触摸事件的类型,随后处理器1280根据触摸事件的类型在显示面板1241上提供相应的视觉输出。虽然在图12中,触控面板1231与显示面板1241是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板1231与显示面板1241集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器1250,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1241的亮度,接近传感器可在手机移动到耳边时,关闭显示面板1241和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路1260、扬声器1261,传声器1262可提供用户与手机之间的音频接口。音频电路1260可将接收到的音频数据转换后的电信号,传输到扬声器1261,由扬声器1261转换为声纹信号输出;另一方面,传声器1262将收集的声纹信号转换为电信号,由音频电路1260接收后转换为音频数据,再将音频数据输出处理器1280处理后,经RF电路1210以发送给比如另一手机,或者将音频数据输出至存储器1220以便进一步处理。
Wi-Fi属于短距离无线传输技术,手机通过Wi-Fi模块1270可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图12示出了Wi-Fi模块1270,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器1280是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1220内的软件程序和/或模块,以及调用存储在存储器1220内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1280可包括一个或多个处理单元;优选的,处理器1280可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1280中。
手机还包括给各个部件供电的电源1290(比如电池),优选的,电源可以通过电源管理系统与处理器1280逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本发明实施例中,该终端所包括的处理器1280具备执行上述的实施例一、二所述的ANR实时监控方法的功能,在此不再赘述。
实施例五
在本发明实施例中,本发明还提供一种计算机可读的存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例一、二所述的ANR实时监控方法。其中,所述存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random AcceSS Memory,随即存储器)、EPROM(EraSableProgrammable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(ElectricallyEraSable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,存储介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。可以是只读存储器,磁盘或光盘等。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (11)

1.一种ANR实时监控方法,其特征在于,包括以下步骤:
在待检测应用程序的主线程中启动接口;
从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR;
在确定所述主线程发生ANR时,获取所述主线程的信息;
根据所述主线程的信息,形成ANR关键信息;
将所述ANR关键信息上传系统。
2.根据权利要求1所述的ANR实时监控方法,其特征在于,所述在待检测应用程序的主线程中启动接口,包括以下步骤:
在待检测应用程序的主线程中启动Runnable接口;
采用消息回调机制,调用子线程向主线程发送消息。
3.根据权利要求2所述的ANR实时监控方法,其特征在于,所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR,包括以下步骤:
设置计数器在所述接口接收到消息回调信息时加1;
从所述启动接口的时间点起,经过预设时间后,判断当前计数器的计数值是否有所变化,若否,确定所述主线程发生ANR。
4.根据权利要求1或3所述的ANR实时监控方法,其特征在于,所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR,还包括以下步骤:
若是,返回继续所述在待检测应用程序的主线程中启动接口的步骤。
5.根据权利要求1所述的ANR实时监控方法,其特征在于,所述在确定所述主线程发生ANR时,获取所述主线程的信息,包括以下步骤:
在发生ANR的时间点,调用子线程收集当前所述主线程的信息。
6.根据权利要求1所述的ANR实时监控方法,其特征在于,所述根据所述主线程的信息,形成ANR关键信息,包括以下步骤:
根据所述主线程的信息中的记录信息,筛选出导致ANR的信息;
将所述导致ANR的信息输出形成字符串形式的ANR关键信息。
7.根据权利要求1所述的ANR实时监控方法,其特征在于,所述将所述ANR关键信息上传系统,包括以下步骤:
通过开发者集成的日志上传系统将所述ANR关键信息上传至服务器。
8.根据权利要求1所述的ANR实时监控方法,其特征在于,所述从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息,包括以下步骤:
检测CPU占用率;
若CPU占用率在预设阈值范围内,将预定时长作为当前预设时间;
若CPU占用率超出预设阈值范围,根据预设规则加长或缩短预定时长,将调整后的预定时长作为当前预设时间;
确认本次所述启动接口的时间点距离当前时间的时长到达所述当前预设时间,检测所述接口是否接收到消息回调信息。
9.一种ANR实时监控装置,其特征在于,包括以下模块:
启动模块,用于在待检测应用程序的主线程中启动接口;
确定模块,用于从所述启动接口的时间点起,经过预设时间后,检测所述接口是否接收到消息回调信息;若否,确定所述主线程发生ANR;
获取模块,用于在确定所述主线程发生ANR时,获取所述主线程的信息;
筛选模块,用于根据所述主线程的信息,形成ANR关键信息;
上传模块,用于将所述ANR关键信息上传系统。
10.一种终端,其特征在于,其包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据权利要求1~8任一项所述的ANR实时监控方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现权利要求1~8中任一项所述的ANR实时监控方法。
CN201810370705.0A 2018-04-24 2018-04-24 Anr实时监控方法、装置、终端和存储介质 Pending CN108572906A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810370705.0A CN108572906A (zh) 2018-04-24 2018-04-24 Anr实时监控方法、装置、终端和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810370705.0A CN108572906A (zh) 2018-04-24 2018-04-24 Anr实时监控方法、装置、终端和存储介质

Publications (1)

Publication Number Publication Date
CN108572906A true CN108572906A (zh) 2018-09-25

Family

ID=63574140

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810370705.0A Pending CN108572906A (zh) 2018-04-24 2018-04-24 Anr实时监控方法、装置、终端和存储介质

Country Status (1)

Country Link
CN (1) CN108572906A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110489318A (zh) * 2019-08-20 2019-11-22 Oppo(重庆)智能科技有限公司 systrace信息的抓取方法、装置、存储介质及终端
CN110704216A (zh) * 2019-08-26 2020-01-17 北京三快在线科技有限公司 用于终端的应用程序无响应检测方法、装置及电子设备
CN112306800A (zh) * 2020-10-23 2021-02-02 北京罗克维尔斯科技有限公司 应用程序无响应的监控方法、装置、车载设备及车辆
CN113626244A (zh) * 2021-08-26 2021-11-09 广州市百果园网络科技有限公司 Anr异常数据的收集方法、显示方法、装置及设备
WO2022188576A1 (zh) * 2021-03-10 2022-09-15 北京字节跳动网络技术有限公司 性能问题定位方法、装置、电子设备和存储介质

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110489318A (zh) * 2019-08-20 2019-11-22 Oppo(重庆)智能科技有限公司 systrace信息的抓取方法、装置、存储介质及终端
CN110704216A (zh) * 2019-08-26 2020-01-17 北京三快在线科技有限公司 用于终端的应用程序无响应检测方法、装置及电子设备
CN112306800A (zh) * 2020-10-23 2021-02-02 北京罗克维尔斯科技有限公司 应用程序无响应的监控方法、装置、车载设备及车辆
WO2022188576A1 (zh) * 2021-03-10 2022-09-15 北京字节跳动网络技术有限公司 性能问题定位方法、装置、电子设备和存储介质
CN113626244A (zh) * 2021-08-26 2021-11-09 广州市百果园网络科技有限公司 Anr异常数据的收集方法、显示方法、装置及设备

Similar Documents

Publication Publication Date Title
CN108572906A (zh) Anr实时监控方法、装置、终端和存储介质
CN108268366B (zh) 测试用例执行方法及装置
CN106453767B (zh) 跌落后故障检测方法及装置
CN107544842B (zh) 应用程序处理方法和装置、计算机设备、存储介质
CN107272872A (zh) 省电控制方法及相关产品
CN104423822B (zh) 录制自动化测试脚本的方法及装置
CN104516812A (zh) 一种软件测试方法和装置
CN103500002A (zh) 应用程序管理的方法、装置及终端设备
CN103488939A (zh) 一种提示用户的方法、装置及终端
CN106991034A (zh) 一种监控卡顿的方法和设备以及移动终端
CN108965587A (zh) 一种消息提醒方法、装置以及设备
CN104093123A (zh) 应用程序的信息推送方法、装置和系统、移动终端
CN103530520A (zh) 一种数据获取的方法及终端
CN112540996B (zh) 一种业务数据的校验方法、装置、电子设备及存储介质
CN108574778A (zh) 投屏亮度调节方法以及相关产品
CN109992965A (zh) 进程处理方法和装置、电子设备、计算机可读存储介质
CN106648460B (zh) 计步数据过滤方法及智能终端
CN109474784A (zh) 一种预览图像处理方法及终端设备
CN107423598B (zh) 一种解锁控制方法及移动终端
CN103546632A (zh) 一种用于移动终端的闹铃响铃方法、装置和移动终端
CN107491349B (zh) 应用程序处理方法和装置、计算机设备、存储介质
CN110413497A (zh) 异常监控方法、装置、终端设备及计算机可读存储介质
CN107908492A (zh) 黑屏检测方法、移动终端及计算机可读存储介质
CN110413639A (zh) 数据核查方法及装置、电子设备和计算机可读存储介质
CN106407800A (zh) 一种hook的方法及终端设备

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20200424

Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province

Applicant after: Alibaba (China) Co.,Ltd.

Address before: 510640 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping square B radio tower 15 layer self unit 02

Applicant before: GUANGZHOU UC NETWORK TECHNOLOGY Co.,Ltd.

RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20180925