CN110083474A - 防止应用程序崩溃的方法及装置 - Google Patents

防止应用程序崩溃的方法及装置 Download PDF

Info

Publication number
CN110083474A
CN110083474A CN201910325260.9A CN201910325260A CN110083474A CN 110083474 A CN110083474 A CN 110083474A CN 201910325260 A CN201910325260 A CN 201910325260A CN 110083474 A CN110083474 A CN 110083474A
Authority
CN
China
Prior art keywords
target message
respond
determined
message
objects
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
CN201910325260.9A
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.)
Wireless Living (hangzhou) Mdt Infotech Ltd
Original Assignee
Wireless Living (hangzhou) Mdt Infotech 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 Wireless Living (hangzhou) Mdt Infotech Ltd filed Critical Wireless Living (hangzhou) Mdt Infotech Ltd
Priority to CN201910325260.9A priority Critical patent/CN110083474A/zh
Publication of CN110083474A publication Critical patent/CN110083474A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Stored Programmes (AREA)

Abstract

本公开是关于防止应用程序崩溃的方法及装置。该方法包括:在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;生成能响应所述目标消息的第二对象;将所述目标消息转发给所述第二对象响应。该技术方案可以自动生成一个第二对象来响应该目标消息,避免出现目标消息无法被响应而导致的应用崩溃。

Description

防止应用程序崩溃的方法及装置
技术领域
本公开涉及计算机技术领域,尤其涉及防止应用程序崩溃的方法及装置。
背景技术
iOS(iPhone Operating System,苹果操作系统)平台的应用程序使用的编程语言是Objective-C(扩充C的面向对象编程语言)。该语言的一大特点是具有动态性,只有在某个消息所指示的方法被执行时,才能确定执行该方法的对象。但是就是由于这样的动态性,在程序编译阶段无法确定最终执行该消息所指示的方法的对象,这就会出现最终确定的对象在执行该消息指示的方法时发生错误(即该对象并不能实现该消息所指示的方法),这就会导致应用程序崩溃。
发明内容
本公开实施例提供一种防止应用程序崩溃的方法及装置。所述技术方案如下:
根据本公开实施例的第一方面,提供一种防止应用程序崩溃的方法,包括:
在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;
生成能响应所述目标消息的第二对象;
将所述目标消息转发给所述第二对象响应。
在一个实施例中,所述方法还包括:
判断是否存在其他对象响应所述目标消息;
所述生成能响应所述目标消息的第二对象,包括:
在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象
在一个实施例中,所述判断是否存在其他对象响应所述目标消息,包括:
针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息;
在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
在一个实施例中,所述生成能响应所述目标消息的第二对象,包括:
创建一个新对象;
在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
在一个实施例中,所述方法还包括:
在判定所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
根据本公开实施例的第二方面,提供一种防止应用程序崩溃的装置,包括:
拦截模块,用于在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;
生成模块,用于生成能响应所述目标消息的第二对象;
转发模块,用于将所述目标消息转发给所述第二对象响应。
在一个实施例中,所述装置还包括:
判断模块,用于判断是否存在其他对象响应所述目标消息;
所述生成模块包括:
第一生成子模块,用于在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象
在一个实施例中,所述判断模块包括:
第一判断子模块,用于针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息;
第二判断子模块,用于在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;
第一确定子模块,用于在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
第二确定子模块,用于在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
第三确定子模块,用于在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
在一个实施例中,所述生成模块包括:
创建子模块,用于创建一个新对象;
第二生成子模块,用于在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
在一个实施例中,所述装置还包括:
在判定所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
根据本公开实施例的第三方面,提供一种防止应用程序崩溃的装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述方法中的步骤。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,存储有计算机指令,所述计算机指令被处理器执行时实现上述方法中的步骤。
本公开的实施例提供的技术方案可以包括以下有益效果:本实施例可以在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;生成能响应所述目标消息的第二对象;将所述目标消息转发给所述第二对象响应;从而保证了该目标消息能够正常被响应,防止出现消息无法响应导致的应用程序崩溃现象,大大提升了应用程序的稳定性及开发人员的工作效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是根据一示例性实施例示出的一种防止应用程序崩溃的方法的流程图。
图2是根据一示例性实施例示出的一种防止应用程序崩溃的方法的流程图。
图3是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图。
图4是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图。
图5是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图。
图6是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图。
图7是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图。
图8是根据一示例性实施例示出的一种防止应用程序崩溃的方法的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
目前,针对应用程序的崩溃,一般情况下开发者会预先判断某段代码是否可能出现对象无法响应消息的情况,然后预先做消息的检查,避免将一个对象无法响应的消息发送给该对象。但是消息发送是Objective-C语言的基础,如果每一个地方都进行这样的判断,那么代码将会变得非常冗余,开发人员的工作效率会很低,这样的实现是不现实的。
为了解决上述问题,本实施例可以在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;生成能响应所述目标消息的第二对象;将所述目标消息转发给所述第二对象响应;从而保证了该目标消息能够正常被响应,防止出现消息无法响应导致的应用程序崩溃现象,大大提升了应用程序的稳定性及开发人员的工作效率。
图1是根据一示例性实施例示出的一种防止应用程序崩溃的方法的流程图,如图1所示,该防止应用程序崩溃的方法用于终端中,包括以下步骤101-103:
在步骤101中,在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象。
在步骤102中,生成能响应所述目标消息的第二对象。
在步骤103中,将所述目标消息转发给所述第二对象响应。
这里,每个对象都具有属性(Attribute)和方法(Method)这两方面的特征,对象的属相描述了对象的状态和特征,对象的方法说明了对象的行为和功能,两者结合在一起构成了对象的完整描述。在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联系来反映,当一个对象需要另外一个对象提供服务时,它会向对方发出一个服务请求,而受到请求的对象会响应这个请求并完成指定的服务,这种向对象发出的服务请求就称为消息,消息的发送可以由以下代码段表示:“[object doSomeThing]”。其中,object就是接收消息的对象,doSomeThing是消息的名称,表示该消息指示接收消息的对象实现的方法。
这里,终端IOS中的runtime在向一个对象发送消息时提供了消息转发机制,当对象接收到无法解读的消息后,就会启动消息转发机制,该消息转发机制流程为:先征询消息接收对象,所属的类,看其是否能动态加方法,来处理当前这个消息中请求,这叫做动态方法解析;在该消息接收对象无法再动态新增方法去响应消息时,消息接收对象就会执行“-forwardingTargetForSelector”方法,查看有没有其他对象能处理这条消息,若有,则消息接收对象会向runtime返回一个返回值对象即能处理这条消息的其他对象,这样runtime会把该消息转给那个能处理这条消息的对象来响应。若没有,则消息接收对象会向runtime返回nil(无),runtime会将与消息有关的细节封装到NSInvocation对象中,再给消息接收对象最后一次机会,令其设法解决当前还未处理的这条消息,但是由于消息接收对象通常都无法响应该消息,最终会导致应用程序崩溃。
故,本实施例中,终端可以在第一对象接收到无法解读的目标消息,启动消息转发机制的情况下,在第一对象不能动态新增方法去响应目标消息时,拦截所述第一对象的目标方法,即拦截NSObject对象的“-forwardingTargetForSelector”方法,避免第一对象执行第一对象的“-forwardingTargetForSelector”方法后,在没有其他对象能响应目标消息返回nil,进而最终出现应用崩溃的情况。此时,可以通过runtime提供的方法交换能力,将第一对象的”-forwardingTargetForSelector”方法拦截,先执行本发明自定义的代码段,在该代码段中使用Objective-C的底层方法,自动生成能响应所述目标消息的第二对象;并将生成的第二对象返回给runtime,runtime就会继续执行消息转发机制,将所述目标消息转发给所述第二对象响应。
本实施例可以在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;判断是否存在其他对象响应所述目标消息;在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象;将所述目标消息转发给所述第二对象响应;如此可以在没有对象响应目标消息时,自动生成一个第二对象来响应该目标消息,避免出现该消息无法被响应而导致的应用崩溃。
在一种可能的实施方式中,上述防止应用程序崩溃的方法还可以实现为以下步骤A1,该方法中的步骤102可以实现为以下步骤A2。
在步骤A1中,判断是否存在其他对象响应所述目标消息。
在步骤A2中,在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象。
这里,通过runtime提供的方法交换能力,将第一对象的”-forwardingTargetForSelector”方法拦截后,可以先判断是否存在其他对象响应所述目标消息,如果不存在其他对象响应所述目标消息,则表明执行该第一对象的”-forwardingTargetForSelector”方法后最终会导致该目标消息无法响应,进而造成应用崩溃,此时,runtime才需要执行本发明提供的代码段来生成能响应所述目标消息的第二对象,以便runtime将该目标消息转发给第二对象进行响应,避免因该目标消息无法响应造成应用崩溃。
如果存在其他对象响应所述目标消息,则表明执行该第一对象的”-forwardingTargetForSelector”方法后,runtime会获得可以响应该目标消息的对象,可以将该目标消息转发给该对象进行响应,不会造成应用崩溃,此时就不需要生成该第二对象来响应该目标消息。
本实施例可以先判断是否存在其他对象响应所述目标消息,在没有其他对象响应所述目标消息时才会生成第二对象,避免生成对象过多,资源浪费。
在一种可能的实施方式中,上述防止应用程序崩溃的方法中的在步骤A1可以实现为以下步骤A11至A14。
在步骤A11中,针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息。
在步骤A12中,在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息。
在步骤A13中,在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息。
在步骤A14中,在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
示例的,针对其他对象中的每一个待判定对象,runtime可以运行以下代码来判断该待判定对象能否响应该目标消息:
BOOL isRespondsToSelector=[self respondsToSelector:aSelector];//该待判定对象自身是否可以直接响应目标消息;
NSMethodSignature*signature=[self
methodSignatureForSelector:aSelector];//该待判定对象是否提供一个新的对象用于响应所述目标消息。
如果该该待判定对象自身可以直接响应目标消息或者该待判定对象可以提供一个新的对象用于响应所述目标消息,则确定该待判定对象响应所述目标消息。
这里,上述A1至A4的判定流程中,对于第一个待判定对象,在第一个待判定对象自身可以直接响应目标消息时,可以直接确定存在其他对象响应所述目标消息,上述判定流程结束。在第一个待判定对象自身不可以直接响应目标消息时,继续执行上述判定流程,判断该第一个待判定对象是否可以提供一个新的对象用于响应所述目标消息,在第一个待判定对象自身可以提供一个新的对象用于响应所述目标消息时,可以直接确定存在其他对象响应所述目标消息,上述判定流程结束。在第一个待判定对象自身不可以提供一个新的对象用于响应所述目标消息时,继续判定下一个待判定对象是否能响应该目标消息,直至有一个待判定对象能响应该目标消息。当然,也可能是所有的其他对象都不能响应该目标消息,此时就确定不存在其他对象响应所述目标消息。
这里需要说明的是,在编程的时候,程序员已经知道某个对象不能响应目标消息,手动的通过代码创建一个可响应该目标消息的对象时,就可能回存在某个待判定对象可以提供一个新的对象用于响应所述目标消息。
本实施例可以通过判断某个待判定对象自身是否可以直接响应目标消息以及该待判定对象是否可以提供一个新的对象用于响应所述目标消息来确定待判定对象能否响应目标消息,判定准确。
在一种可能的实施方式中,上述防止应用程序崩溃的方法中的在步骤103可以实现为以下步骤B1至B2。
在步骤B1中,创建一个新对象。
在步骤B2中,在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
示例的,runtime可以执行以下代码来生成该第二对象:
VDSelectorProtectObject*selectorProtectObject=[VDSelectorProtectObject alloc]init];//创建一个新对象;
class_addMethod([VDSelectorProtectObject class],aSelector,(IMP)emptyFunction,encodeStringChar)//向这个对象添加用于响应所述目标消息的方法。
由于该第二对象中有用于响应所述目标消息的方法,故,该第二对象就可以响应该目标消息。这样,runtime就可以获取到可以响应该目标消息的第二对象,如此,runtime就可以继续执行消息转发机制,但不再执行第一对象的“-forwardingTargetForSelector”方法,而是直接将该目标消息转发给第二对象响应,由于该第二对象中存在有用于响应所述目标消息的方法,故该第二对象可以响应该目标消息,如此,该目标消息就可以被响应,防止应用出现崩溃。
本实施例可以通过在创建的新对象中添加用于响应目标消息的方法来生成第二对象,实现简单。
在一中可能的实施例中,上述防止应用程序崩溃的方法中的在步骤103还可以包括以下步骤C1。
在步骤C1中,在判定存在所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
这里,在判定存在所述其他对象能响应所述目标消息时,runtime可以继续执行消息转发机制,执行第一对象的目标方法即“-forwardingTargetForSelector”,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象,这样,runtime就可以将该目标消息转发给能响应所述目标消息的其他对象,让该其他对象响应该目标消息,如此,该目标消息就可以被响应,应用不会出现无法响应目标消息所造成的崩溃。
本实施例可以在判定存在所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象,如此可以将该目标消息转发给可以响应该目标消息的其他对象来响应,不需创建新对象。
下面通过几个实施例详细介绍实现过程。
图2是根据一示例性实施例示出的一种防止应用程序崩溃的方法的流程图,如图2所示,该防止应用程序崩溃的方法可以由终端等设备实现,包括步骤201-209。
在步骤201中,在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象。
在步骤202中,针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息。
在步骤203中,在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息。
在步骤204中,在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息。
在步骤205中,在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
在步骤206中,在判定不存在其他对象响应所述目标消息时,创建一个新对象。
在步骤207中,在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
在步骤208中,将所述目标消息转发给所述第二对象响应。
在步骤209中,在判定所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
下述为本公开装置实施例,可以用于执行本公开方法实施例。
图3是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图3所示,该防止应用程序崩溃的装置包括:
拦截模块301,用于在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;
生成模块302,用于生成能响应所述目标消息的第二对象;
转发模块303,用于将所述目标消息转发给所述第二对象响应。
作为一种可能的实施例,图4是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图,如图4所示,上述公开的防止应用程序崩溃的装置还可以被配置成包括判断模块304;还可以把生成模块302配置成包括第一生成子模块3021,其中:
判断模块304,用于判断是否存在其他对象响应所述目标消息;
第一生成子模块3021,用于在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象。
作为一种可能的实施例,图5是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图,如图5所示,上述公开的防止应用程序崩溃的装置还可以把判断模块304配置成包括第一判断子模块3041,第二判断子模块3042,第一确定子模块3043,第二确定子模块3044和第三确定子模块3045,其中:
第一判断子模块3041,用于针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息;
第二判断子模块3042,用于在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;
第一确定子模块3043,用于在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
第二确定子模块3044,用于在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
第三确定子模块3045,用于在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
作为一种可能的实施例,图6是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图,如图6所示,上述公开的防止应用程序崩溃的装置还可以把生成模块302配置成包括创建子模块3022和第二生成子模块3023,其中:
创建子模块3022,用于创建一个新对象;
第二生成子模块3023,用于在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
作为一种可能的实施例,图7是根据一示例性实施例示出的一种防止应用程序崩溃的装置的框图,如图7所示,上述公开的防止应用程序崩溃的装置还可以被配置成包括执行模块305,其中:
执行模块305,用于在判定所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图8是根据一示例性实施例示出的一种防止应用程序崩溃的方法的框图,该装置适用于终端设备。例如,装置800可以是移动电话,游戏控制台,电脑、平板设备,个人数字助理等。
装置800可以包括以下一个或多个组件:处理组件801,存储器802,电源组件803,多媒体组件804,音频组件805,输入/输出(I/O)接口806,传感器组件807,以及通信组件808。
处理组件801通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件801可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件801可以包括一个或多个模块,便于处理组件801和其他组件之间的交互。例如,处理组件801可以包括多媒体模块,以方便多媒体组件804和处理组件801之间的交互。
存储器802被配置为存储各种类型的数据以支持在装置800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器802可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件803为装置800的各种组件提供电力。电源组件803可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。
多媒体组件804包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件804包括一个前置摄像头和/或后置摄像头。当装置800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件805被配置为输出和/或输入音频信号。例如,音频组件805包括一个麦克风(MIC),当装置800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器802或经由通信组件808发送。在一些实施例中,音频组件805还包括一个扬声器,用于输出音频信号。
I/O接口806为处理组件801和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件807包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件807可以检测到装置800的打开/关闭状态,组件的相对定位,例如所述组件为装置800的显示器和小键盘,传感器组件807还可以检测装置800或装置800一个组件的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的温度变化。传感器组件807可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件807还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件807还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件808被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件808经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件808还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,装置800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器802,上述指令可由装置800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置1200的处理器执行时,使得装置1200能够执行上述防止应用程序崩溃的方法,所述方法包括:
在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;
生成能响应所述目标消息的第二对象;
将所述目标消息转发给所述第二对象响应。
在一个实施例中,所述方法还包括:
判断是否存在其他对象响应所述目标消息;
所述生成能响应所述目标消息的第二对象,包括:
在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象。
在一个实施例中,所述判断是否存在其他对象响应所述目标消息,包括:
针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息;
在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
在一个实施例中,所述生成能响应所述目标消息的第二对象,包括:
创建一个新对象;
在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
在一个实施例中,所述方法还包括:
在判定所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
本实施例还提供了一种防止应用程序崩溃的装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;
生成能响应所述目标消息的第二对象;
将所述目标消息转发给所述第二对象响应。
在一个实施例中,上述处理器还可以被配置为:
所述方法还包括:
判断是否存在其他对象响应所述目标消息;
所述生成能响应所述目标消息的第二对象,包括:
在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象。
在一个实施例中,上述处理器还可以被配置为:
所述判断是否存在其他对象响应所述目标消息,包括:
针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息;
在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
在一个实施例中,上述处理器还可以被配置为:
所述生成能响应所述目标消息的第二对象,包括:
创建一个新对象;
在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
在一个实施例中,上述处理器还可以被配置为:
所述方法还包括:
在判定所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

Claims (12)

1.一种防止应用程序崩溃的方法,其特征在于,包括:
在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;
生成能响应所述目标消息的第二对象;
将所述目标消息转发给所述第二对象响应。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
判断是否存在其他对象响应所述目标消息;
所述生成能响应所述目标消息的第二对象,包括:
在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象。
3.根据权利要求2所述的方法,其特征在于,所述判断是否存在其他对象响应所述目标消息,包括:
针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息;
在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
4.根据权利要求1所述的方法,其特征在于,所述生成能响应所述目标消息的第二对象,包括:
创建一个新对象;
在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
5.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在判定所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
6.一种防止应用程序崩溃的装置,其特征在于,包括:
拦截模块,用于在启动消息转发机制,确定第一对象不能动态加方法来响应目标消息时,拦截所述第一对象的目标方法,所述目标方法用于使第一对象返回返回值对象;
生成模块,用于生成能响应所述目标消息的第二对象;
转发模块,用于将所述目标消息转发给所述第二对象响应。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
判断模块,用于判断是否存在其他对象响应所述目标消息;
所述生成模块包括:
第一生成子模块,用于在判定不存在其他对象响应所述目标消息时,生成能响应所述目标消息的第二对象。
8.根据权利要求7所述的装置,其特征在于,所述判断模块包括:
第一判断子模块,用于针对所述其他对象中的任一待判定对象,判断所述待判定对象自身能否直接响应所述目标消息;
第二判断子模块,用于在所述待判定对象不能直接响应所述目标消息时,判断所述待判定对象是否已经提供了一个新的对象用于响应所述目标消息;
第一确定子模块,用于在所述待判定对象能直接响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
第二确定子模块,用于在所述待判定对象没有提供一个新的对象用于响应所述目标消息时,判定所述待判定对象不能响应所述目标消息;在所述待判定对象提供一个新的对象用于响应所述目标消息时,判定所述待判定对象能响应所述目标消息;
第三确定子模块,用于在所述待判定对象能响应所述目标消息时,确定存在其他对象响应所述目标消息,在任一所述待判定对象均不能响应所述目标消息时,确定不存在其他对象响应所述目标消息。
9.根据权利要求7所述的装置,其特征在于,所述生成模块包括:
创建子模块,用于创建一个新对象;
第二生成子模块,用于在所述新对象中添加用于响应所述目标消息的方法,生成所述第二对象。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
执行模块,用于在判定所述其他对象能响应所述目标消息时,执行所述第一对象的目标方法,使第一对象返回返回值对象,所述返回值对象为能响应所述目标消息的其他对象。
11.一种防止应用程序崩溃的装置,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行权利要求1至5任一项所述方法中的步骤。
12.一种计算机可读存储介质,存储有计算机指令,其特征在于,所述计算机指令被处理器执行时实现权利要求1至5任一项所述方法中的步骤。
CN201910325260.9A 2019-04-22 2019-04-22 防止应用程序崩溃的方法及装置 Pending CN110083474A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910325260.9A CN110083474A (zh) 2019-04-22 2019-04-22 防止应用程序崩溃的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910325260.9A CN110083474A (zh) 2019-04-22 2019-04-22 防止应用程序崩溃的方法及装置

Publications (1)

Publication Number Publication Date
CN110083474A true CN110083474A (zh) 2019-08-02

Family

ID=67416019

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910325260.9A Pending CN110083474A (zh) 2019-04-22 2019-04-22 防止应用程序崩溃的方法及装置

Country Status (1)

Country Link
CN (1) CN110083474A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112052054A (zh) * 2020-09-02 2020-12-08 北京奇艺世纪科技有限公司 函数调用方法、装置、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107911530A (zh) * 2017-11-27 2018-04-13 努比亚技术有限公司 消息提醒方法、通信拦截方法、终端及计算机存储介质
CN108052407A (zh) * 2017-12-13 2018-05-18 深圳乐信软件技术有限公司 一种应用程序崩溃防护方法、装置、设备及存储介质
CN108762962A (zh) * 2018-05-18 2018-11-06 网易宝有限公司 防止应用异常的方法和装置、存储介质及电子设备
CN109408265A (zh) * 2018-09-28 2019-03-01 广州虎牙信息科技有限公司 一种ios运行异常的保护方法、装置、终端设备及存储介质
CN109408261A (zh) * 2018-09-26 2019-03-01 中国平安财产保险股份有限公司 应用程序崩溃处理方法、装置、计算机设备和存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107911530A (zh) * 2017-11-27 2018-04-13 努比亚技术有限公司 消息提醒方法、通信拦截方法、终端及计算机存储介质
CN108052407A (zh) * 2017-12-13 2018-05-18 深圳乐信软件技术有限公司 一种应用程序崩溃防护方法、装置、设备及存储介质
CN108762962A (zh) * 2018-05-18 2018-11-06 网易宝有限公司 防止应用异常的方法和装置、存储介质及电子设备
CN109408261A (zh) * 2018-09-26 2019-03-01 中国平安财产保险股份有限公司 应用程序崩溃处理方法、装置、计算机设备和存储介质
CN109408265A (zh) * 2018-09-28 2019-03-01 广州虎牙信息科技有限公司 一种ios运行异常的保护方法、装置、终端设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112052054A (zh) * 2020-09-02 2020-12-08 北京奇艺世纪科技有限公司 函数调用方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
US20180365004A1 (en) Method and device for calling software development kit
US10764934B2 (en) Method, apparatus for terminal device to access wireless network
EP3200116B1 (en) Method and apparatus for acquiring information via a virtual identity module from lost or stolen terminal
EP3032412A1 (en) Method and device for upgrading firmware
CN105553963B (zh) 定位服务的控制方法和装置
CN105975156B (zh) 应用界面显示方法及装置
CN104837154B (zh) 无线访问接入点的控制方法及装置
EP3116165A1 (en) Method and device for testing a terminal
JP6763088B2 (ja) リソース送信方法および装置
CN109451817A (zh) 无人机接入方法及装置
CN109582400B (zh) 程序调用方法及装置
EP3793278A1 (en) Paging synchronization method and apparatus
CN106528255B (zh) 类加载方法及装置
CN110781080B (zh) 程序调试方法及装置、存储介质
CN109451880A (zh) 网络连接方法及装置
CN109314913A (zh) 接入控制限制方法及装置
CN108965413A (zh) 信息交互方法、装置及存储介质
CN109129484A (zh) 机器人控制方法、装置及存储介质
CN107562500B (zh) 调试装置、方法及设备
CN109379783A (zh) 射频资源分配方法及装置
CN106537288B (zh) 控制应用自启动的方法及装置
CN105516972B (zh) 网络连接方法及装置
CN109565381B (zh) 信息反馈方法及装置
CN109951701A (zh) 监控故障处理方法及装置
CN110083474A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20190802