CN110175101A - 一种异常捕获方法、装置以及终端 - Google Patents
一种异常捕获方法、装置以及终端 Download PDFInfo
- Publication number
- CN110175101A CN110175101A CN201910361565.5A CN201910361565A CN110175101A CN 110175101 A CN110175101 A CN 110175101A CN 201910361565 A CN201910361565 A CN 201910361565A CN 110175101 A CN110175101 A CN 110175101A
- Authority
- CN
- China
- Prior art keywords
- exception
- abnormal
- life cycle
- thread
- application program
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
-
- 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)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提出一种异常捕获方法、装置和终端,所述方法包括:创建拦截异常的应用程序初始化入口;在拦截异常的应用程序初始化入口中,创建线程异常的捕获机制;当发生线程异常时,利用线程异常的捕获机制进行异常捕获,使应用程序正常运行。利用线程异常的捕获机制进行异常捕获,应用程序不会崩溃退出,提升了用户在使用应用程序的体验。同时,保证了用户的数据不会损失,不影响用户操作应用程序。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种异常捕获方法、装置以及终端。
背景技术
用户在使用手机等移动终端的应用程序时,发生了没有被程序捕获的运行时异常,导致应用程序崩溃,影响用户操作数据。例如,常见的空指针异常和指针越界异常,其中,空指针异常是指调用一个为空的对象的方法,指针越界异常是指获取超过一个长度为n的数组的第n+1条数据时发生的越界异常。
在某个应用程序捕获运行时异常,目前普遍采用如下两种方案来解决:第一,在业务代码使用异常捕获机制(try/catch机制),能够在代码发生异常时,进行捕获,但是这对程序员的要求非常高,要对所有可能会发生运行时异常的代码块都增加try/catch机制,如果未加try/catch的代码块发生了运行时异常,会造成系统崩溃,应用程序提示应用停止运行并退出。第二,在应用程序初始化启动时,全局设置捕获全局异常程序(Thread UncaughtException Handler),全局获取异常事件,然而,只能拦截子线程的异常,无法拦截主线程发生的异常。如果是主线程发生的异常,应用程序同样会直接崩溃退出,并且发生未捕获的异常时数据也不会被保留,给用户造成了非常不好的体验。
发明内容
本发明实施例提供一种异常捕获方法、装置以及终端,以解决现有技术中的一个或多个技术问题。
第一方面,本发明实施例提供了一种异常捕获方法,包括:
创建拦截异常的应用程序初始化入口;
在所述拦截异常的应用程序初始化入口中,创建线程异常的捕获机制;
当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,使应用程序正常运行。
在一种实施方式中,创建线程异常的捕获机制,包括:
创建应用程序线程异常的捕获机制,包括:
全局设置系统默认的捕获全局异常程序替换成自定义的异常处理程序;
当所述捕获全局异常程序拦截到系统回调的异常对象时,判断所述系统回调的异常对象是主线程异常还是子线程异常;
若所述系统回调的异常对象是所述主线程异常,则在消息循环处的代码块中增加异常捕获机制,得到所述应用程序线程异常的捕获机制。
在一种实施方式中,当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,包括:
在消息队列轮询过程中,执行具有所述异常捕获机制的代码块,对所述主线程异常进行捕获。
在一种实施方式中,创建线程异常的捕获机制,还包括:
创建活动组件的生命周期异常的捕获机制,包括:
控制活动组件的生命周期的系统对象替换为继承该系统对象的自定义对象,来控制所述活动组件的生命周期的调用;
在所述活动组件的生命周期的调用处的代码块中增加异常捕获机制,得到所述活动组件的生命周期的捕获机制。
在一种实施方式中,当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,包括:
若所述活动组件的生命周期发生异常,执行具有所述异常捕获机制的代码块,对所述活动组件的生命周期异常进行捕获。
在一种实施方式中,所述应用程序正常运行之后,还包括:
利用异常回调接口将所述应用程序线程异常以及所述活动组件的生命周期异常回调给所述应用程序。
在一种实施方式中,利用异常回调接口将所述应用程序线程异常以及所述活动组件的生命周期异常回调给所述应用程序之后,还包括:
在所述应用程序中,识别异常类型,并生成用于上传至服务器的异常日志;
根据所述应用程序线程异常判断是否重启所述应用程序;以及
根据所述活动组件的生命周期异常判断是否重启系统。
第二方面,本发明实施例提供了一种异常捕获装置,包括:
初始化入口创建模块,用于创建拦截异常的应用程序初始化入口;
捕获机制创建模块,用于在所述拦截异常的应用程序初始化入口中,创建线程异常的捕获机制;
异常捕获模块,用于当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,使应用程序正常运行。
在一种实施方式中,所述捕获机制创建模块包括:
线程异常捕获机制创建单元,用于创建应用程序线程异常的捕获机制;
所述线程异常捕获机制创建单元包括:
异常处理程序替换子单元,用于全局设置系统默认的捕获全局异常程序替换成自定义的异常处理程序;
线程类型判断子单元,用于当所述捕获全局异常程序拦截到系统回调的异常对象时,判断所述系统回调的异常对象是主线程异常还是子线程异常;
主线程异常捕获添加子单元,用于若所述系统回调的异常对象是所述主线程异常,则在消息循环处的代码块中增加异常捕获机制,得到所述应用程序线程异常的捕获机制。
在一种实施方式中,所述异常捕获模块包括:
主线程异常捕获单元,用于在消息队列轮询过程中,执行具有所述异常捕获机制的代码块,对所述主线程异常进行捕获。
在一种实施方式中,所述捕获机制创建模块还包括:
生命周期异常捕获机制创建单元,用于创建活动组件的生命周期异常的捕获机制;
所述生命周期异常捕获机制创建单元包括:
系统对象替换子单元,用于控制活动组件的生命周期的系统对象替换为继承该系统对象的自定义对象,来控制所述活动组件的生命周期的调用;
生命周期异常捕获添加子单元,用于在所述活动组件的生命周期的调用处的代码块中增加异常捕获机制,得到所述活动组件的生命周期的捕获机制。
在一种实施方式中,所述异常捕获模块包括:
生命周期异常捕获单元,用于若所述活动组件的生命周期发生异常,执行具有所述异常捕获机制的代码块,对所述活动组件的生命周期异常进行捕获。
在一种实施方式中,还包括:
异常回调模块,用于利用异常回调接口将所述应用程序线程异常以及所述活动组件的生命周期异常回调给所述应用程序。
在一种实施方式中,所述异常回调模块包括:
异常识别上传单元,用于在所述应用程序中,识别异常类型,并生成用于上传至服务器的异常日志;
应用程序重启单元,用于根据所述应用程序线程异常判断是否重启所述应用程序;以及
系统重启单元,用于根据所述活动组件的生命周期异常判断是否重启系统。
第三方面,本发明实施例提供了一种异常捕获装置,所述装置的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,所述异常捕获装置的结构中包括处理器和存储器,所述存储器用于存储支持所述异常捕获装置执行上述异常捕获方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。所述异常捕获装置还可以包括通信接口,用于与其他设备或通信网络通信。
第四方面,本发明实施例提供了一种计算机可读存储介质,用于存储异常捕获装置所用的计算机软件指令,其包括用于执行上述异常捕获方法所涉及的程序。
上述技术方案中的一个技术方案具有如下优点或有益效果:在发生异常时,利用线程异常的捕获机制进行异常捕获,应用程序不会崩溃退出,提升了用户在使用应用程序的体验。同时,保证了用户的数据不会损失,不影响用户操作应用程序。
上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本发明进一步的方面、实施方式和特征将会是容易明白的。
附图说明
在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本发明公开的一些实施方式,而不应将其视为是对本发明范围的限制。
图1示出根据本发明实施例提供的一种异常捕获方法的流程图。
图2示出根据本发明实施例提供的另一种异常捕获方法的流程图。
图3示出根据本发明实施例提供的另一种异常捕获方法的流程图。
图4示出根据本发明实施例提供的另一种异常捕获方法的流程图。
图5示出根据本发明实施例提供的另一种异常捕获方法的流程图。
图6示出根据本发明实施例提供的一种异常捕获方法的过程图。
图7示出根据本发明实施例提供的一种异常捕获装置的结构框图。
图8示出根据本发明实施例提供的另一种异常捕获装置的结构框图。
图9示出根据本发明实施例提供的另一种异常捕获装置的结构框图。
图10示出根据本发明实施例提供的一种异常捕获终端的结构图。
具体实施方式
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本发明的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
实施例一
在一种实施方式中,提供了一种异常捕获方法,图1示出根据本发明实施例的提供的一种异常捕获方法流程示意图。该方法可以应用于手机、IPAD等移动终端,不仅能够识别出安卓(Android)系统抛出的异常,而且还能够将发生的异常进行拦截,并处理异常事件。如果发生了异常,却没有及时拦截,则会导致应用程序崩溃、卡死或者退出。如图1所示,所述方法包括:
步骤S10:创建拦截异常的应用程序初始化入口。
参见图6,在安卓(Android)系统中,可以首先创建类异常拦截 (DefenseCrash),用作整个异常捕获装置的统一初始化入口。所有的拦截功能都可以在这个类异常拦截里面初始化,需要使用此方法的应用程序只需要与此初始化入口直接交互即可。
步骤S20:在拦截异常的应用程序初始化入口中,创建线程异常的捕获机制。
Android系统抛出的异常可能是在应用程序(Application,APP)运行时, APP自身创建的不同线程的代码发生异常。例如,应用程序自身控制的线程发生异常,此种异常容易导致应用程序发生崩溃。Android系统抛出的异常还可能是在Android系统在调用活动组件(Activity)的生命周期的代码时发生异常。例如,系统控制的Activity的主线程发生异常,此种异常容易导致应用程序发生卡死、退出。所以,针对上述两种情况的线程异常,创建线程异常的捕获机制来捕获异常,例如,将异常捕获机制(try/catch机制)增加在各线程中。
步骤S30:当发生线程异常时,利用线程异常的捕获机制进行异常捕获,使应用程序正常运行。
在发生异常时,利用线程异常的捕获机制进行异常捕获,APP不会崩溃退出,提升了用户在使用APP的体验。同时,保证了用户的数据不会损失,不影响用户操作APP。
在一种实施方式中,如图2所示,步骤S20,包括:
步骤S201:创建应用程序线程异常的捕获机制。
在一种实施方式中,如图3所示,步骤S201,包括:
步骤S2011:全局设置系统默认的捕获全局异常程序替换成自定义的异常处理程序。
步骤S2012:当捕获全局异常程序拦截到系统回调的异常对象时,判断系统回调的异常对象是主线程异常还是子线程异常。
步骤S2013:若系统回调的异常对象是主线程异常,则在消息循环处的代码块中增加异常捕获机制,得到应用程序线程异常的捕获机制。
在一种示例中,参见图6,创建拦截线程类(HookThread)。HookThread 用作拦截应用程序控制的线程异常,线程异常包括主线程异常和子线程异常,主线程就是UI(UserInterface)用户界面线程。系统利用捕获全局异常程序(Thread.setDefaultUncaughtExceptionHandler)的方法设置异常处理类,例如,系统默认处理的类(Thread.UncaughtExceptionHandler),用于捕获程序未捕获的异常。将系统默认的捕获全局异常程序替换成自定义的异常处理程序,自定义的异常处理程序可以包括:当捕获全局异常程序拦截到系统回调的异常对象时,或者说在回调对象的回调方法uncaughtException()中,判断系统回调的异常对象是主线程还是子线程。如果是子线程发生异常,由于已经设置了捕获全局异常程序,子线程异常不会导致程序崩溃,APP正常运行。如果是主线程发生异常,则对消息循环处,也就是在Looper.loop()方法中增加异常捕获机制 (try/catch机制),并无限循环Looper.loop(),得到应用程序线程异常的捕获机制。
在一种实施方式中,如图3所示,步骤S30,包括:
步骤S301:在消息队列轮询过程中,执行具有异常捕获机制的代码块,对主线程异常进行捕获。
在消息队列轮询过程中,执行具有异常捕获机制的代码块,使系统的轮询不会被中断,异常会被捕获。由于系统的消息分发机制是基于队列的无限循环访问,也就是循环轮询队列是否有新消息。如果发生异常,会导致循环中断,并导致程序奔溃。如果增加了try/catch机制,异常会被捕获,那么轮询就会一直执行,不会导致程序崩溃退出。
在一种实施方式中,如图2所示,步骤S20,包括:
步骤S202:创建活动组件的生命周期异常的捕获机制。
在一种实施方式中,如图4所示,步骤S202,包括:
步骤S2021:控制活动组件的生命周期的系统对象替换为继承该系统对象的自定义对象,来控制活动组件的生命周期的调用;
步骤S2022;在活动组件的生命周期的调用处的代码块中增加异常捕获机制,得到活动组件的生命周期的捕获机制。
在一种实施方式中,如图4所示,步骤S30,包括:
步骤S302;若活动组件的生命周期发生异常,执行具有异常捕获机制的代码块,对活动组件的生命周期异常进行捕获。
在一种示例中,参见图6,初始化设置类HookInstrumentation,来拦截系统活动组件(Activity)的生命周期发生的异常。其中,Activity是应用程序组件,提供程序与用户交互的界面,意义在于系统控制每个界面的生命周期。
初始化设置类HookInstrumentation的具体方法可以是:首先通过反射的方式获取系统活动组件线程(ActivityThread);之后调用ActivityThread的静态方法,ActivityThread的静态方法可以是当前活动组件线程 (currentActivityThread())获取到ActivityThread实例对象;再通过反射获取到类对象的全局字段变量mInstrumentation,该变量是系统类Instrumentation对象实例;最后,将ActivityThread的全局字段变量mInstrumentation设置成自定义类(DefenseInstrumentation)对象。自定义类(DefenseInstrumentation)继承 (extends)系统类Instrumentation,并替换系统类Instrumentation对象,来控制系统活动组件(Activity)生命周期的调用。所以,控制活动组件的生命周期的系统对象通过反射机制替换为继承该系统对象的自定义对象,来控制活动组件的生命周期的调用。
重写生命周期调用方法,并在活动组件的生命周期的调用处的代码块中增加异常捕获机制(try/catch机制)。如果是Activity生命周期发生的异常,由于已经将系统活动组件线程(ActivityThread)的系统Instrumentation类对象替换成自定义的HookInstrumentation类对象,并且增加了try/catch机制,所以在生命周期中发生的异常,会被捕获,并执行对应的具有异常捕获(catch)代码块, APP继续运行,不会崩溃退出。
在一种实施方式中,如图5所示,步骤S30之后,还包括:
步骤S40:利用异常回调接口将应用程序线程异常以及活动组件的生命周期异常回调给应用程序。
参见图6,创建异常回调接口(ICrashHandler),implements表示实现异常回调接口的功能。用作应用程序线程异常以及活动组件的生命周期异常回调给应用程序。应用程序只与初始化入口和ICrashHandler交互,使得应用程序在异常捕获的过程中,无需了解异常捕获装置内部如何实现异常捕获,直接使用即可。
在应用程序启动的初始化方法中,初始化类异常拦截(DefenseCrash),进而初始化入口中的HookThread和HookInstrumentation。
在一种实施方式中,如图5所示,步骤S40之后,还包括:
步骤S50:在应用程序中,识别异常类型,并生成用于上传至服务器的异常日志;
步骤S51:根据应用程序线程异常判断是否重启所述应用程序;以及
步骤S52:根据活动组件的生命周期异常判断是否重启系统。
在一种示例中,参见图6,创建类异常事件的分发(CrashDispatcher),用作对异常事件的类型进行识别。类异常事件的分发(CrashDispatcher)持有通过拦截异常的初始化入口DefenseCrash传入的ICrashHandler对象变量。 ICrashHandler用于回调异常事件至应用程序中。将所有的异常生成异常日志,上传至服务器。
根据应用程序线程异常判断是否重启应用程序,以及根据活动组件的生命周期异常判断是否重启系统。
在利用上述异常捕获方法时,首先封装拦截异常的异常捕获装置,通过创建类DefenseCrash作为整个异常捕获装置的统一化入口。创建ICrashHandler 接口作为回调异常的接口,使得使用本实施方式中的异常捕获方法的应用程序仅通过初始化入口和回调接口交互,来实现异常捕获。然后,在应用程序启动的初始化方法中,不仅对DefenseCrash进行初始化,还对HookThread和 HookInstrumentation进行初始化。因此,只需要直接设置初始化代码,就可以实现对应用程序的异常捕获功能。最后,在发生异常时,对异常进行捕获。
实施例二
在另一种具体的实施方式中,如图7所示,提供了一种异常捕获装置,包括:
初始化入口创建模块10,用于创建拦截异常的应用程序初始化入口;
捕获机制创建模块20,用于在所述拦截异常的应用程序初始化入口中,创建线程异常的捕获机制;
异常捕获模块30,用于当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,使应用程序正常运行。
在一种实施方式中,如图8所示,所述捕获机制创建模块20包括:
线程异常捕获机制创建单元201,用于创建应用程序线程异常的捕获机制;
线程异常捕获机制创建单元201包括:
异常处理程序替换子单元,用于全局设置系统默认的捕获全局异常程序替换成自定义的异常处理程序;
线程类型判断子单元,用于当所述捕获全局异常程序拦截到系统回调的异常对象时,判断所述系统回调的异常对象是主线程异常还是子线程异常;
主线程异常捕获添加子单元,用于若所述系统回调的异常对象是所述主线程异常,则在消息循环处的代码块中增加异常捕获机制,得到所述应用程序线程异常的捕获机制。
在一种实施方式中,如图8所示,所述异常捕获模块30包括:
主线程异常捕获单元301,用于在消息队列轮询过程中,执行具有所述异常捕获机制的代码块,对所述主线程异常进行捕获。
在一种实施方式中,如图8所示,所述捕获机制创建模块20还包括:
生命周期异常捕获机制创建单元202,用于创建活动组件的生命周期异常的捕获机制;
生命周期异常捕获机制创建单元202包括:
系统对象替换子单元,用于控制活动组件的生命周期的系统对象替换为继承该系统对象的自定义对象,来控制所述活动组件的生命周期的调用;
生命周期异常捕获添加子单元,用于在所述活动组件的生命周期的调用处的代码块中增加异常捕获机制,得到所述活动组件的生命周期的捕获机制。
在一种实施方式中,如图8所示,所述异常捕获模块30包括:
生命周期异常捕获单元302,用于若所述活动组件的生命周期发生异常,执行具有所述异常捕获机制的代码块,对所述活动组件的生命周期异常进行捕获。
在一种实施方式中,如图9所示,还包括:
异常回调模块40,用于利用异常回调接口将所述应用程序线程异常以及所述活动组件的生命周期异常回调给所述应用程序。
在一种实施方式中,如图9所示,还包括:
异常识别上传模块50,用于在所述应用程序中,识别异常类型,并生成用于上传至服务器的异常日志;
应用程序重启模块51,用于根据所述应用程序线程异常判断是否重启所述应用程序;以及
系统重启模块52,用于根据所述活动组件的生命周期异常判断是否重启系统。
本发明实施例各装置中的各模块的功能可以参见上述方法中的对应描述,在此不再赘述。
实施例三
图10示出根据本发明实施例的异常捕获终端的结构框图。如图10所示,该终端包括:存储器910和处理器920,存储器910内存储有可在处理器920 上运行的计算机程序。所述处理器920执行所述计算机程序时实现上述实施例中的异常捕获方法。所述存储器910和处理器920的数量可以为一个或多个。
该终端还包括:
通信接口930,用于与外界设备进行通信,进行数据交互传输。
存储器910可能包含高速RAM存储器,也可能还包括非易失性存储器 (non-volatile memory),例如至少一个磁盘存储器。
如果存储器910、处理器920和通信接口930独立实现,则存储器910、处理器920和通信接口930可以通过总线相互连接并完成相互间的通信。所述总线可以是工业标准体系结构(ISA,Industry Standard Architecture)总线、外部设备互连(PCI,PeripheralComponent Interconnect)总线或扩展工业标准体系结构(EISA,Extended IndustryStandard Architecture)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器910、处理器920及通信接口930集成在一块芯片上,则存储器910、处理器920及通信接口930可以通过内部接口完成相互间的通信。
本发明实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现上述实施例中任一所述的方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统) 使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA) 等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。所述存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (16)
1.一种异常捕获方法,其特征在于,应用于终端上,包括:
创建拦截异常的应用程序初始化入口;
在所述拦截异常的应用程序初始化入口中,创建线程异常的捕获机制;
当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,使应用程序正常运行。
2.根据权利要求1所述的方法,其特征在于,创建线程异常的捕获机制,包括:
创建应用程序线程异常的捕获机制,包括:
全局设置系统默认的捕获全局异常程序替换成自定义的异常处理程序;
当所述捕获全局异常程序拦截到系统回调的异常对象时,判断所述系统回调的异常对象是主线程异常还是子线程异常;
若所述系统回调的异常对象是所述主线程异常,则在消息循环处的代码块中增加异常捕获机制,得到所述应用程序线程异常的捕获机制。
3.根据权利要求2所述的方法,其特征在于,当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,包括:
在消息队列轮询过程中,执行具有所述异常捕获机制的代码块,对所述主线程异常进行捕获。
4.根据权利要求2所述的方法,其特征在于,创建线程异常的捕获机制还包括:
创建活动组件的生命周期异常的捕获机制,包括:
控制活动组件的生命周期的系统对象替换为继承该系统对象的自定义对象,来控制所述活动组件的生命周期的调用;
在所述活动组件的生命周期的调用处的代码块中增加异常捕获机制,得到所述活动组件的生命周期的捕获机制。
5.根据权利要求4所述的方法,其特征在于,当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,包括:
若所述活动组件的生命周期发生异常,执行具有所述异常捕获机制的代码块,对所述活动组件的生命周期异常进行捕获。
6.根据权利要求4所述的方法,其特征在于,所述应用程序正常运行之后,还包括:
利用异常回调接口将所述应用程序线程异常以及所述活动组件的生命周期异常回调给所述应用程序。
7.根据权利要求6所述的方法,其特征在于,利用异常回调接口将所述应用程序线程异常以及所述活动组件的生命周期异常回调给所述应用程序之后,还包括:
在所述应用程序中,识别异常类型,并生成用于上传至服务器的异常日志;
根据所述应用程序线程异常判断是否重启所述应用程序;以及
根据所述活动组件的生命周期异常判断是否重启系统。
8.一种异常捕获装置,其特征在于,包括:
初始化入口创建模块,用于创建拦截异常的应用程序初始化入口;
捕获机制创建模块,用于在所述拦截异常的应用程序初始化入口中,创建线程异常的捕获机制;
异常捕获模块,用于当发生线程异常时,利用所述线程异常的捕获机制进行异常捕获,使应用程序正常运行。
9.根据权利要求8所述的装置,其特征在于,所述捕获机制创建模块包括:
线程异常捕获机制创建单元,用于创建应用程序线程异常的捕获机制;
所述线程异常捕获机制创建单元包括:
异常处理程序替换子单元,用于全局设置系统默认的捕获全局异常程序替换成自定义的异常处理程序;
线程类型判断子单元,用于当所述捕获全局异常程序拦截到系统回调的异常对象时,判断所述系统回调的异常对象是主线程异常还是子线程异常;
主线程异常捕获添加子单元,用于若所述系统回调的异常对象是所述主线程异常,则在消息循环处的代码块中增加异常捕获机制,得到所述应用程序线程异常的捕获机制。
10.根据权利要求9所述的装置,其特征在于,所述异常捕获模块包括:
主线程异常捕获单元,用于在消息队列轮询过程中,执行具有所述异常捕获机制的代码块,对所述主线程异常进行捕获。
11.根据权利要求9所述的装置,其特征在于,所述捕获机制创建模块还包括:
生命周期异常捕获机制创建单元,用于创建活动组件的生命周期异常的捕获机制;
所述生命周期异常捕获机制创建单元包括:
系统对象替换子单元,用于控制活动组件的生命周期的系统对象替换为继承该系统对象的自定义对象,来控制所述活动组件的生命周期的调用;
生命周期异常捕获添加子单元,用于在所述活动组件的生命周期的调用处的代码块中增加异常捕获机制,得到所述活动组件的生命周期的捕获机制。
12.根据权利要求11所述的装置,其特征在于,所述异常捕获模块包括:
生命周期异常捕获单元,用于若所述活动组件的生命周期发生异常,执行具有所述异常捕获机制的代码块,对所述活动组件的生命周期异常进行捕获。
13.根据权利要求11所述的装置,其特征在于,还包括:
异常回调模块,用于利用异常回调接口将所述应用程序线程异常以及所述活动组件的生命周期异常回调给所述应用程序。
14.根据权利要求13所述的装置,其特征在于,还包括:
异常识别上传模块,用于在所述应用程序中,识别异常类型,并生成用于上传至服务器的异常日志;
应用程序重启模块,用于根据所述应用程序线程异常判断是否重启所述应用程序;以及
系统重启模块,用于根据所述活动组件的生命周期异常判断是否重启系统。
15.一种异常捕获终端,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至7中任一项所述的方法。
16.一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910361565.5A CN110175101B (zh) | 2019-04-30 | 2019-04-30 | 一种异常捕获方法、装置以及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910361565.5A CN110175101B (zh) | 2019-04-30 | 2019-04-30 | 一种异常捕获方法、装置以及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110175101A true CN110175101A (zh) | 2019-08-27 |
CN110175101B CN110175101B (zh) | 2023-05-26 |
Family
ID=67690379
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910361565.5A Active CN110175101B (zh) | 2019-04-30 | 2019-04-30 | 一种异常捕获方法、装置以及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110175101B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290872A (zh) * | 2020-01-15 | 2020-06-16 | 上海高仙自动化科技发展有限公司 | 应用程序及应用程序的异常处理方法 |
CN112559235A (zh) * | 2020-12-18 | 2021-03-26 | 惠州Tcl移动通信有限公司 | 一种安卓线程异常处理方法、终端及计算机可读存储介质 |
CN113543138A (zh) * | 2021-07-15 | 2021-10-22 | 恒安嘉新(北京)科技股份公司 | 异常电话拦截系统、方法及存储介质 |
CN114756400A (zh) * | 2022-06-15 | 2022-07-15 | 四川新网银行股份有限公司 | 一种基于安卓系统的应用程序异常处理方法及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120030559A1 (en) * | 2010-01-11 | 2012-02-02 | Manion Joshua R | Enhanced Delivery of Content and Program Instructions |
CN105045617A (zh) * | 2015-07-03 | 2015-11-11 | Tcl集团股份有限公司 | 一种Android系统的应用恢复方法及系统 |
CN105786673A (zh) * | 2016-03-24 | 2016-07-20 | 北京百度网讯科技有限公司 | 告警信息处理方法和装置 |
CN106155877A (zh) * | 2015-03-23 | 2016-11-23 | Tcl集团股份有限公司 | 一种Android应用的模糊测试方法及系统 |
CN107391295A (zh) * | 2017-08-11 | 2017-11-24 | 东软集团股份有限公司 | 应用程序异常的处理方法及装置 |
CN108563581A (zh) * | 2018-04-25 | 2018-09-21 | 咪咕文化科技有限公司 | 异常检测处理方法及装置、电子设备及计算机存储介质 |
CN109656773A (zh) * | 2017-10-12 | 2019-04-19 | 卓望数码技术(深圳)有限公司 | 一种基于ios系统应用异常崩溃的处理框架 |
-
2019
- 2019-04-30 CN CN201910361565.5A patent/CN110175101B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120030559A1 (en) * | 2010-01-11 | 2012-02-02 | Manion Joshua R | Enhanced Delivery of Content and Program Instructions |
CN106155877A (zh) * | 2015-03-23 | 2016-11-23 | Tcl集团股份有限公司 | 一种Android应用的模糊测试方法及系统 |
CN105045617A (zh) * | 2015-07-03 | 2015-11-11 | Tcl集团股份有限公司 | 一种Android系统的应用恢复方法及系统 |
CN105786673A (zh) * | 2016-03-24 | 2016-07-20 | 北京百度网讯科技有限公司 | 告警信息处理方法和装置 |
CN107391295A (zh) * | 2017-08-11 | 2017-11-24 | 东软集团股份有限公司 | 应用程序异常的处理方法及装置 |
CN109656773A (zh) * | 2017-10-12 | 2019-04-19 | 卓望数码技术(深圳)有限公司 | 一种基于ios系统应用异常崩溃的处理框架 |
CN108563581A (zh) * | 2018-04-25 | 2018-09-21 | 咪咕文化科技有限公司 | 异常检测处理方法及装置、电子设备及计算机存储介质 |
Non-Patent Citations (1)
Title |
---|
赵益民 等: "机载构件系统多任务异常处理方法研究", 《信息通信》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290872A (zh) * | 2020-01-15 | 2020-06-16 | 上海高仙自动化科技发展有限公司 | 应用程序及应用程序的异常处理方法 |
CN112559235A (zh) * | 2020-12-18 | 2021-03-26 | 惠州Tcl移动通信有限公司 | 一种安卓线程异常处理方法、终端及计算机可读存储介质 |
WO2022126851A1 (zh) * | 2020-12-18 | 2022-06-23 | 惠州Tcl移动通信有限公司 | 一种安卓线程异常处理方法、终端及计算机可读存储介质 |
CN113543138A (zh) * | 2021-07-15 | 2021-10-22 | 恒安嘉新(北京)科技股份公司 | 异常电话拦截系统、方法及存储介质 |
CN114756400A (zh) * | 2022-06-15 | 2022-07-15 | 四川新网银行股份有限公司 | 一种基于安卓系统的应用程序异常处理方法及系统 |
CN114756400B (zh) * | 2022-06-15 | 2022-08-26 | 四川新网银行股份有限公司 | 一种基于安卓系统的应用程序异常处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110175101B (zh) | 2023-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110175101A (zh) | 一种异常捕获方法、装置以及终端 | |
CN105045643B (zh) | 安卓系统中Launcher的启动方法及装置 | |
CN104484223B (zh) | 一种安卓系统应用关闭方法和装置 | |
CN109739770A (zh) | 小程序的调试方法及装置 | |
CN106250229B (zh) | 事件处理的方法及装置 | |
CN105740018B (zh) | 应用的唤醒方法及装置 | |
JP7093979B2 (ja) | デバイスプロキシ装置及びそれを含む計算機システム | |
CN111801653A (zh) | 用于多线程数据处理环境的线程调度 | |
WO2017202083A1 (zh) | 微码调试方法及单板 | |
CN112256421A (zh) | 通信处理方法、装置、存储介质及电子设备 | |
US20210406111A1 (en) | Watchdog circuit, circuit, system-on-chip, method of operating a watchdog circuit, method of operating a circuit, and method of operating a system-on-chip | |
CN110286990A (zh) | 用户界面展示方法、装置、设备及存储介质 | |
CN109583198B (zh) | 监测页面的方法、装置、存储介质及电子设备 | |
CN106802819A (zh) | 一种应用程序自启动的处理方法、装置及移动终端 | |
US9443109B2 (en) | Computing device and method of processing secure services for computing device | |
CN113806025B (zh) | 数据处理方法、系统、电子装置及存储介质 | |
CN110968370B (zh) | 一种数据处理方法及装置 | |
CN108108240B (zh) | 进程管理方法、进程管理装置及移动终端 | |
CN112965698B (zh) | 自动驾驶软件架构平台、构建方法和构建装置 | |
US20230116107A1 (en) | Processor and booting method thereof | |
CN108776623B (zh) | 一种优化方法、计算机设备和存储介质 | |
CN108509013B (zh) | 一种处理指令的方法及装置 | |
US10664276B2 (en) | Remote command invocation using a register for storing a command and an attention bit indicating command has been issued | |
EP3414659B1 (en) | Thread diversion awaiting log call return | |
JP6962717B2 (ja) | 情報処理装置、情報処理方法および情報処理プログラム |
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 |