CN108132817A - 对象管理方法及装置 - Google Patents
对象管理方法及装置 Download PDFInfo
- Publication number
- CN108132817A CN108132817A CN201711435711.1A CN201711435711A CN108132817A CN 108132817 A CN108132817 A CN 108132817A CN 201711435711 A CN201711435711 A CN 201711435711A CN 108132817 A CN108132817 A CN 108132817A
- Authority
- CN
- China
- Prior art keywords
- class
- message
- memory headroom
- monitoring
- address
- 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
Landscapes
- Debugging And Monitoring (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种对象管理方法及装置,属于终端技术领域。所述方法包括:当第一对象已经释放时,将第一对象的首地址内存空间存储的原始类替换为监控类,监控类是指用于监控已释放的第一对象的消息的类;当接收到消息发送指令时,访问消息发送指令携带的野指针对应的首地址内存空间,得到监控类,野指针是指引用第一对象的指针,野指针指向首地址;确定监控类的对象,得到第二对象;由第二对象响应消息发送指令携带的消息。本发明避免野指针崩溃问题,进而保证终端的正常运行。
Description
技术领域
本发明涉及终端技术领域,特别涉及一种对象管理方法及装置。
背景技术
在面向对象的编程语言构建的操作系统(例如IOS)中,操作系统以及各种应用在运行过程中以对象为基本单元。终端可以创建对象,由对象调用函数以执行操作,例如,由音乐播放对象调用播放器函数来播放音乐,由页面绘制对象调用绘制函数来绘制页面等。
对象的生命周期可以包括创建阶段—应用阶段—释放阶段,在创建阶段,终端会为对象在内存中分配一定长度的内存段,该内存段中首地址内存空间(是指内存段的首地址对应的内存空间)用于存储对象的类,其余用于存储对象的函数指针以及对象在应用阶段产生的数据等,同时终端会创建指向首地址的指针,将该指针传递给需要调用该对象的每个函数。在应用阶段,对象可以在内存空间中存储生成的数据,并从内存空间中读取数据。在此阶段,任一函数可以通过持有的指针调用消息发送指令,终端在运行该函数时可以接收到消息发送指令,该消息发送指令携带指针和消息,终端响应该消息发送指令,会访问该指针指向的地址,得到对象的类,从而确定该对象,由对象响应消息,例如,消息可以携带函数的名称,对象可以从首地址内存空间以外的内存空间中查找该函数的名称对应的函数指针,从而调用该函数指针对应的函数。在释放阶段,当任一对象调用释放函数后,通知终端自身已经释放时,终端会释放对象占用的内存空间,例如可以向内存空间写入不可访问的数据,或者将内存空间分配给其他对象。
在实现本发明的过程中,发明人发现相关技术至少存在以下问题:
管理对象的过程经常面临野指针崩溃问题:当任一对象已经释放后,引用该对象的指针称为野指针,如果终端接收到携带野指针的消息发送指令,终端会产生逻辑错误、访问到不可访问的数据、查找对象的函数错误等各种情况,导致系统崩溃,对终端的正常运行造成极大影响。
发明内容
本发明实施例提供了一种对象管理方法及装置,能够解决相关技术中的野指针崩溃问题。所述技术方案如下:
第一方面,提供了一种对象管理方法,所述方法包括:
当第一对象已经释放时,将所述第一对象的首地址内存空间存储的原始类替换为监控类,所述第一对象是指待监控的任一对象,所述首地址内存空间是指所述第一对象占用的内存段的首地址对应的内存空间,所述原始类是指所述第一对象所属的类,所述监控类是指用于监控已释放的第一对象的消息的类;
当接收到消息发送指令时,访问所述消息发送指令携带的野指针对应的首地址内存空间,得到所述监控类,所述野指针是指引用所述第一对象的指针,所述野指针指向所述首地址;
确定所述监控类的对象,得到第二对象;
由所述第二对象响应所述消息发送指令携带的消息。
本发明实施例提供的方法,通过将已释放的第一对象的首地址内存空间存储的类替换为监控类,在接收到针对第一对象的消息发送指令时,会确定监控类的第二对象,由第二对象响应已释放的第一对象的消息,保证消息能够正常响应,从而避免野指针崩溃问题,进而保证终端的正常运行。
在一种可能的设计中,所述由所述第二对象响应所述消息发送指令携带的消息,包括:
由所述第二对象拦截所述消息;或,
由所述第二对象将所述消息转发给第三对象,所述第三对象是指用于接收已释放的第一对象的消息的对象;或,
由所述第二对象替换所述消息中的参数,并将替换后的消息转发给第三对象。
在一种可能的设计中,所述由所述第二对象响应所述消息发送指令携带的消息之前,所述方法还包括:
向所述第一对象占用的内存段中所述首地址内存空间以外的内存空间填充预设数据。
在一种可能的设计中,所述由所述第二对象响应所述消息发送指令携带的消息之后,所述方法还包括:
确定调用所述消息发送指令的函数;
在调用栈中记录所述函数的名称和/或地址。
在一种可能的设计中,所述将所述第一对象的首地址内存空间存储的原始类替换为监控类之前,所述方法还包括:
当任一对象释放时,获取所述对象所属的类;
当所述类属于预设白名单时,确定所述对象为第一对象,所述预设白名单包括至少一种待监控的类。
在一种可能的设计中,所述将所述第一对象的首地址内存空间存储的原始类替换为监控类,包括:
当所述监控管理类已创建对象时,将所述第一对象的首地址内存空间存储的原始类替换为监控类;或,
当所述监控管理类未创建对象时,基于所述监控类创建第二对象,将所述第一对象的首地址内存空间存储的原始类替换为监控类。
第二方面,提供了一种对象管理装置,所述装置包括:
替换模块,用于当第一对象已经释放时,将所述第一对象的首地址内存空间存储的原始类替换为监控类,所述第一对象是指待监控的任一对象,所述首地址内存空间是指所述第一对象占用的内存段的首地址对应的内存空间,所述原始类是指所述第一对象所属的类,所述监控类是指用于监控已释放的第一对象的消息的类;
访问模块,用于当接收到消息发送指令时,访问所述消息发送指令携带的野指针对应的首地址内存空间,得到所述监控类,所述野指针是指引用所述第一对象的指针,所述野指针指向所述首地址;
确定模块,用于确定所述监控类的对象,得到第二对象;
响应模块,用于由所述第二对象响应所述消息发送指令携带的消息。
在一种可能的设计中,所述响应模块,用于由所述第二对象拦截所述消息;或,由所述第二对象将所述消息转发给第三对象,所述第三对象是指用于接收已释放的第一对象的消息的对象;或,由所述第二对象替换所述消息中的参数,并将替换后的消息转发给第三对象。
在一种可能的设计中,所述装置还包括:
填充模块,用于向所述第一对象占用的内存段中所述首地址内存空间以外的内存空间填充预设数据。
在一种可能的设计中,所述确定模块,还用于确定调用所述消息发送指令的函数;所述装置还包括:
记录模块,用于在调用栈中记录所述函数的名称和/或地址。
在一种可能的设计中,所述装置还包括:
获取模块,用于当任一对象释放时,获取所述对象所属的类;
所述确定模块,还用于当所述类属于预设白名单时,确定所述对象为第一对象,所述预设白名单包括至少一种待监控的类。
在一种可能的设计中,所述替换模块,还用于当所述监控管理类已创建对象时,将所述第一对象的首地址内存空间存储的原始类替换为监控类;或,当所述监控管理类未创建对象时,基于所述监控类创建第二对象,将所述第一对象的首地址内存空间存储的原始类替换为监控类。
第三方面,提供了一种终端,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第一方面以及第一方面的任一种可能设计中的对象管理方法。
第四方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现上述第一方面以及第一方面的任一种可能设计中的对象管理方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种对象占用的内存段的示意图;
图2是本发明实施例提供的一种对象管理方法的流程图;
图3是本发明实施例提供的一种对象管理方法的流程图;
图4是本发明实施例提供的一种对象管理装置的结构示意图;
图5是本发明实施例提供的一种终端500的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了便于理解,下面先对本公开实施例中涉及的概念进行解释:
类:是指将数据结构和功能相同的对象进行抽象后得到的数据,类的实例即为对象。
对象:是指类创建的实例,是程序的基本单元,对象内部封装了函数和数据,会在终端的内存中占用一段内存段,在内存段中存储所属的类和函数的函数指针。
对象的内存段:参见图1,对象可以在内存中分段式布局,对象占用的内存段可以包括首地址内存空间和其余地址内存空间,首地址内存空间是指内存段的首地址对应的内存空间,其余地址内存空间是指内存段中首地址内存空间以外的内存空间,例如在图1中,内存段的地址为0x0000-0x0005,首地址内存空间是指0x0000对应的内存空间,其余地址内存空间是指0x0001对应的内存空间、0x0002对应的内存空间等。其中,首地址内存空间用于存储对象所属的类,其余地址内存空间用于存储类以外的对象的数据,例如存储对象的函数指针、对象运行过程产生的数据等。对象引用的指针会指向首地址,通过指针可以获取首地址,从而访问到首地址内存空间,例如,假设占用了图1所示的内存段的对象的指针表示为*p,则*p=0x0000。
消息机制:在Objective-c等面向对象的编程语言中,对象调用函数(方法)是通过消息机制实现的,当希望某对象调用某函数时,可以调用消息发送指令,该消息发送指令可以为objc_msgSend指令,该消息发送指令携带引用该对象的指针以及函数的名称,终端接收到消息发送指令时,会指示对应的对象接收对象的消息。
单例模式:单例模式是指一个类有且仅有一个实例(对象),并向终端中的每个函数提供该对象。
图2是本发明实施例提供的一种对象管理方法的流程图,参见图2,该方法包括:
201、当第一对象已经释放时,将该第一对象的首地址内存空间存储的原始类替换为监控类,该第一对象是指待监控的任一对象,该首地址内存空间是指该第一对象占用的内存段的首地址对应的内存空间,该原始类是指该第一对象所属的类,该监控类是指用于监控已释放的第一对象的消息的类。
202、当接收到消息发送指令时,访问该消息发送指令携带的野指针对应的首地址内存空间,得到该监控类,该野指针是指引用该第一对象的指针,该野指针指向该首地址。
203、确定该监控类的对象,得到第二对象。
204、由该第二对象响应该消息发送指令携带的消息。
本发明实施例提供的方法,通过将已释放的第一对象的首地址内存空间存储的类替换为监控类,在接收到针对第一对象的消息发送指令时,会确定监控类的第二对象,由第二对象响应已释放的第一对象的消息,保证消息能够正常响应,从而避免野指针崩溃问题,进而保证终端的正常运行。
在一种可能的设计中,该由该第二对象响应该消息发送指令携带的消息,包括:
由该第二对象拦截该消息;或,
由该第二对象将该消息转发给第三对象,该第三对象是指用于接收已释放的第一对象的消息的对象;或,
由该第二对象替换该消息中的参数,并将替换后的消息转发给第三对象。
在一种可能的设计中,该由该第二对象响应该消息发送指令携带的消息之前,该方法还包括:
向该第一对象占用的内存段中该首地址内存空间以外的内存空间填充预设数据。
在一种可能的设计中,该由该第二对象响应该消息发送指令携带的消息之后,该方法还包括:
确定调用该消息发送指令的函数;
在调用栈中记录该函数的名称和/或地址。
在一种可能的设计中,该将该第一对象的首地址内存空间存储的原始类替换为监控类之前,包括:
当任一对象释放时,获取该对象所属的类;
当该类属于预设白名单时,确定该对象为第一对象,该预设白名单包括至少一种待监控的类。
在一种可能的设计中,该将该第一对象的首地址内存空间存储的原始类替换为监控类,包括:
当该监控管理类已创建对象时,将该第一对象的首地址内存空间存储的原始类替换为监控类;或,
当该监控管理类未创建对象时,基于该监控类创建第二对象,将该第一对象的首地址内存空间存储的原始类替换为监控类。
相关技术中,终端在管理对象的过程经常面临野指针崩溃问题,由于触发野指针崩溃问题的可能场景众多,开发人员和测试人员难以在测试过程中全面覆盖每种可能场景,容易将具有野指针崩溃隐患的应用程序发布至线上,导致终端运行应用程序时产生野指针崩溃问题。
而本发明实施例中,在管理对象的过程中设计了一种监控已释放的对象的消息的机制,通过动态地替换已释放的第一对象所属的类,由监控类的第二对象负责响应第一对象的消息,保证第一对象释放后,发送给该第一对象的消息具有响应方,从而避免了野指针崩溃情况,保证应用程序的稳健性,从而保护终端的正常运行。
图3是本发明实施例提供的一种对象管理方法的流程图。该发明实施例的执行主体为终端,参见图3,该方法包括:
301、终端确定已经释放的对象为第一对象。
第一对象是指待监控的任一对象。当任一对象释放时,终端可以判断该对象是否为第一对象,以便在确定对象为第一对象时,替换第一对象的内存段中存储的数据。其中,当终端的操作系统基于面向对象的编程语言构建时,第一对象可以称为面向对象的编程语言中的任一对象,例如称为Objective-c中的任一对象。
针对确定对象为第一对象的具体方式,在实施中,可以设置预设白名单,预设白名单包括至少一种待监控的类,终端可以基于该预设白名单,确定对象为第一对象。其中,针对获取预设白名单的方式,预设白名单可以封装在应用程序内,终端在运行应用程序的过程中,可以获取该预设白名单。
可选地,预设白名单中包括的待监控的类可以为应用程序内的类,以便终端获取该预设白名单后,可以对应用程序内的类的对象进行监控。示例性地,某一音乐应用程序内封装的预设白名单可以包括播放类、录音类等,终端在运行音乐应用程序时,会获取该预设白名单,从而对播放类、录音类的对象进行监控。另外,该预设白名单中的待监控的类也可以根据实际业务需求确定,例如可以将频繁应用的类作为待监控的类,将应用程序代码内容易滋生bug(缺陷)的类作为待监控的类等。
基于预设白名单确定对象为第一对象的过程具体可以包括以下步骤一至步骤二:
步骤一、当任一对象释放时,获取对象所属的类。
在对象的运行过程中,当对象想要释放时,可以基于引用该对象的指针和释放函数,生成释放指令,该释放指令携带该指针,终端接收到释放指令时,会释放该对象,并获取该释放指令中的指针,确定该指针指向的地址,访问该地址对应的首地址内存空间,从该首地址内存空间中获取对象所属的类。其中,该释放函数可以为free函数、release函数等。
示例性地,假设某对象的指针为*p,对象可以基于*p和free函数,生成free(*p)指令,终端接收到该free(*p)指令时,可以访问*p对应的首地址内存空间,进而从该首地址内存空间获取对象所属的类。
步骤二、当类属于预设白名单时,确定对象为第一对象。
终端得到对象的类后,可以判断类是否属于预设白名单,当类属于预设白名单时,确定对象为第一对象,从而确定第一对象已经释放。当类不属于预设白名单时,则确定对象不是第一对象。
进一步地,在基于预设白名单确定对象是否为第一对象的基础上,由于后续会对第一对象的首地址内存空间存储的类进行替换,而类通常占用一个指针的长度,显然对于内存段的长度不大于一个指针的长度的对象来说,对该对象替换内存空间的意义不大。因此,可以不仅要求第一对象所属的类属于预设白名单,还可以要求第一对象占用的内存段的长度大于一个指针的长度。那么,当任一对象释放时,还可以获取对象占用的内存段的长度,当内存段的长度大于一个指针的长度,且对象所属的类属于预设白名单时,确定对象为第一对象。
需要说明的是,当终端确定已释放的对象不为第一对象,例如对象所属的类不属于预设白名单,或者对象占用的内存段的长度不大于一个指针的长度时,可以直接释放对象占用的内存段。而当终端确定已经释放的对象为第一对象,可以取消释放第一对象占用的内存段,而保存第一对象占用的内存段,以便后续替换了内存段的首地址内存空间存储的数据、填充了首地址以外的内存空间时内存段存储的数据后,不会出现第一对象占用的内存段再次被改写的意外情况,从而避免内存段改写后触发野指针崩溃问题。
302、终端确定监控类已经创建对象。
为了监控已释放的第一对象的消息,本实施例设计了监控类,监控类是指用于监控已释放的第一对象的消息的类,监控类可以进行实例化,即创建对象,由创建的对象来监控第一对象的消息。为了与第一对象区分描述,在此将监控类的对象称为第二对象。
本实施例中,监控管理类可以采用单例模式设计,监控管理类可以仅具有一个第二对象,也即是,可以仅创建一次第二对象。那么,当终端确定第一对象已经释放时,可以判断监控类是否已经创建对象,当监控类未创建对象时,基于监控类创建第二对象,再执行下述步骤303,后续即会由新创建的第二对象监控第一对象的消息,当监控类已创建对象时,则直接执行下述步骤303,后续会由已创建的第二对象监控第一对象的消息。
通过以单例模式设计监控管理类,可以达到以下技术效果:
便于监控已释放的每个第一对象的消息:终端在运行过程中,有且仅有一个第二对象,第二对象可以理解为终端的监控管理器,可以负责监控终端运行时每个已释放的第一对象,达到集中监控的目的,便于对大量已释放的第一对象进行管理。另外,采用单例模式设计监控类,能够避免为大量第一对象分别创建对应的第二对象时产生的内存开销和性能开销,效率较高。
303、终端将第一对象的首地址内存空间存储的原始类替换为监控类,原始类是指第一对象所属的类。
终端可以访问第一对象的首地址内存空间,将首地址内存空间存储的原始类替换为监控类,以便后续访问该首地址内存空间时,由于读取到监控类,从而由监控管理类的第二对象响应该第一对象的消息。其中,终端可以在首地址内存空间中从首字节开始,读取一个指针长度的数据,该一个指针长度的数据即为原始类,终端可以将该原始类替换为监控类。可选地,在将原始类替换为监控类之前,终端可以记录该原始类,以便后续可以分析每个已释放的第一对象的类。
可选地,终端还可以向第一对象占用的内存段中首地址内存空间以外的内存空间填充预设数据。该预设数据可以为0、1,也可以为自定义的非法值数据,例如为0x55。填充预设数据的具体效果详见以下步骤305中的设计二。
304、当终端接收到消息发送指令时,访问消息发送指令携带的野指针指向的首地址内存空间,得到监控类,确定监控类的对象,得到第二对象。
在第一对象创建以及应用的阶段中,当第一对象创建时,终端会在第一对象的首地址内存空间存储第一对象的类(在此称为原始类),并创建引用该第一对象的指针,将该指针传递给需要调用该第一对象的每个函数,之后,每个函数可以基于引用该第一对象的指针,调用消息发送指令。该消息发送指令携带指针和消息,该消息发送指令用于指示向第一对象发送消息,当终端运行函数时,可以接收到消息发送指令,解析该消息发送指令,得到指针和消息,确定该指针指向的首地址,访问首地址对应的首地址内存空间,得到该首地址内存空间存储的原始类,确定该原始类的对象,得到第一对象,由该第一对象响应消息发送指令携带的消息。
而当第一对象释放后,引用该第一对象的指针称为野指针,每个函数仍可基于野指针,调用消息发送指令,此时消息发送指令会携带野指针和消息。本实施例中,当终端接收到携带野指针的消息发送指令时,会解析该消息发送指令,得到野指针和消息,确定野指针指向的首地址,访问首地址对应的首地址内存空间,而由于上述步骤303中将首地址内存空间存储的原始类替换为了监控类,终端在读取首地址内存空间存储的类时,会得到监控类。同时,当首次释放第一对象的情况时,终端创建了一个第二对象,则在终端得到监控类时,确定监控类的对象时,会得到第二对象,那么,终端会由第二对象来响应消息发送指令携带的消息。
305、第二对象响应消息发送指令携带的消息。
消息可以包括函数的名称和函数的参数等,消息用于指示基于函数的名称和其余地址内存空间中的函数指针,确定对应的函数,向函数传入函数的参数,运行函数,得到函数传出的结果,并返回该函数的结果。
本实施例中,由于替换了对象所属的类,终端在步骤305中,会自动确定第二对象来响应该消息,即消息的响应方自动转化为了第二对象,则会由第二对象响应该消息,保证消息具有接收方,避免了消息发送过程的逻辑错误,进而避免逻辑错误所触发的系统崩溃。同时,由于第一对象的首地址内存空间存储了监控类,而非存储不可访问的数据,避免访问到不可访问的数据,进而避免访问到不可访问的数据所触发的系统崩溃。同时,由于第一对象的其余地址内存空间存储了预设数据,能保证第二对象通过执行以下设计二自动转发给第三对象,而不会出现查找对象的函数错误的情况,从而避免查找对象的函数错误所触发的系统崩溃。
第二对象响应消息的具体过程可以包括以下设计一至设计三。
设计一、第二对象拦截消息。
第二对象可以直接拦截消息,即只是接收该消息,而不执行消息对应的动作,即不调用消息指示的函数。
设计二、第二对象将消息转发给第三对象。
第三对象是指用于接收已释放的第一对象的消息的对象,第三对象用于存储已释放的第一对象的消息,还可以用于执行第一对象的消息。其中,可以在创建第二对象时,相应地创建第三对象,以便第二对象转发消息时,可以访问到第三对象,由第三对象接收消息。其中,在创建第二对象时可以在第二对象内部封装第三对象的标识,以便第二对象可以根据第三对象的标识确定第三对象。
可选地,可以设计第二对象的处理逻辑为当无法找到函数以执行消息时,再将消息转发给第三对象。具体地,第二对象接收到消息时,可以解析消息,得到函数的名称,遍历第一对象占用的内存段中首地址内存空间以外的内存空间,即每个其余地址内存空间,在每个其余地址内存空间寻找函数的名称对应的函数指针,以便尝试调用函数指针指向的函数来执行消息。而由于上述步骤303中,将第一对象占用的内存段中首地址内存空间以外的内存空间均填充了预设数据,则第二对象遍历其余内存空间结束时,会找不到函数名称对应的函数指针,从而自动将消息转发给第三对象。
可选地,第三对象接收到消息后,可以执行消息,例如第三对象可以解析消息,得到函数的名称和函数的参数,遍历该第三对象占用的内存段中的其余地址内存空间,在该其余地址内存空间寻找函数的名称对应的函数指针,当确定函数的名称对应的函数指针时,可以调用函数指针指向的函数,向函数传入函数的参数,运行函数后得到函数的结果,将结果返回给调用消息发送指令的函数。
可选地,第三对象接收到消息后,还可以实时或周期地将消息发送给服务器,服务器可以接收该消息,从而获知已释放的第一对象接收到的消息,以便对这些消息进行分析统计。另外,第三对象也可以缓存消息,当接收到服务器的消息调用指令时,再将已经缓存的消息发送给服务器。
设计三、第二对象替换消息中的参数,并将替换后的消息转发给第三对象。
第二对象可以存储预设参数,该预设参数可以为0或nil(表示空的数据)。当第二对象接收到消息时,可以解析消息,得到函数的参数,将函数的参数均替换为该预设参数,并将替换了参数的消息转发给第三对象。
306、终端确定调用消息发送指令的函数,在调用栈中记录函数的名称和/或地址。
终端可以确定调用消息发送指令的函数,获取该函数的名称和/或地址,在调用栈中记录该函数的名称和/或地址。其中,调用栈(call stack)也称为用户栈,属于应用进程的内存空间中的一部分,与系统栈相区别,用于存储应用进程的函数之间相互调用产生的数据。
可选地,终端还可以确定该消息发送指令相关的调用链路,在调用栈中记录该调用链路,以便后续可以提供调用链路,保证开发人员可以根据调用链路找到消息的来源。其中,调用链路包括转发消息的每个函数的名称和/或地址,还可以包括每个函数之间的调用关系。示例性地,假设函数A调用了函数B,函数B调用了函数C,函数C调用消息发送指令时,终端可以记录函数A、函数B和函数C的名称和/或地址,还可以记录A—B—C,以表征函数A、函数B和函数C之间的调用关系。
可选地,当终端在调用栈中记录了函数的名称和/或地址后,后续当终端接收到调用栈信息获取指令时,可以从调用栈中获取函数的名称和/或地址,输出该函数的名称和/或地址,例如显示该函数的名称和/或地址,将该函数的名称和/或地址发送给服务器等。具体地,终端可以运行调试工具(例如adb工具),用户可以点击调试工具提供的调用栈信息获取选项,终端检测到点击操作时,可以获取调用栈信息获取指令。
通过在调用栈中记录该函数的名称和/或地址,可以达到以下技术效果:
便于开发人员分析野指针崩溃问题:相关技术中,当对象已释放后,当获取到携带该对象的野指针的消息发送指令时,由于消息没有响应方,终端仅会在操作系统的系统栈中记录系统栈信息,该系统栈信息较为复杂,难以解析,更难以定位触发该消息发送指令的函数的位置,也就难以分析函数的处理逻辑并修正函数的处理逻辑。而本实施例中,会在调用栈中记录调用消息发送指令的函数的名称和/或地址,并可以向开发人员提供函数的名称和/或地址,开发人员可以根据函数的名称和/或地址快速找到触发该消息发送指令的函数,便于排查错误代码、对错误代码进行更正,保证应用程序的稳健性。
本发明实施例提供的方法,通过将已释放的第一对象的首地址内存空间存储的类替换为监控类,在接收到针对第一对象的消息发送指令时,会确定监控类的第二对象,由第二对象响应已释放的第一对象的消息,保证消息能够正常响应,从而避免野指针崩溃问题,进而保证终端的正常运行。
图4是本发明实施例提供的一种对象管理装置的结构示意图。参见4,该装置包括:替换模块401、访问模块402、确定模块403和响应模块404。
替换模块401,用于当第一对象已经释放时,将该第一对象的首地址内存空间存储的原始类替换为监控类,该第一对象是指待监控的任一对象,该首地址内存空间是指该第一对象占用的内存段的首地址对应的内存空间,该原始类是指该第一对象所属的类,该监控类是指用于监控已释放的第一对象的消息的类;
访问模块402,用于当接收到消息发送指令时,访问该消息发送指令携带的野指针对应的首地址内存空间,得到该监控类,该野指针是指引用该第一对象的指针,该野指针指向该首地址;
确定模块403,用于确定该监控类的对象,得到第二对象;
响应模块404,用于由该第二对象响应该消息发送指令携带的消息。
本发明实施例提供的装置,通过将已释放的第一对象的首地址内存空间存储的类替换为监控类,在接收到针对第一对象的消息发送指令时,会确定监控类的第二对象,由第二对象响应已释放的第一对象的消息,保证消息能够正常响应,从而避免野指针崩溃问题,进而保证终端的正常运行。
在一种可能的设计中,该响应模块404,用于由该第二对象拦截该消息;或,由该第二对象将该消息转发给第三对象,该第三对象是指用于接收已释放的第一对象的消息的对象;或,由该第二对象替换该消息中的参数,并将替换后的消息转发给第三对象。
在一种可能的设计中,该装置还包括:
填充模块,用于向该第一对象占用的内存段中该首地址内存空间以外的内存空间填充预设数据。
在一种可能的设计中,该确定模块403,还用于确定调用该消息发送指令的函数;该装置还包括:
记录模块,用于在调用栈中记录该函数的名称和/或地址。
在一种可能的设计中,该装置还包括:
获取模块,用于当任一对象释放时,获取该对象所属的类;
该确定模块403,还用于当该类属于预设白名单时,确定该对象为第一对象,该预设白名单包括至少一种待监控的类。
在一种可能的设计中,该替换模块401,还用于当该监控管理类已创建对象时,将该第一对象的首地址内存空间存储的原始类替换为监控类;或,当该监控管理类未创建对象时,基于该监控类创建第二对象,将该第一对象的首地址内存空间存储的原始类替换为监控类。
需要说明的是:上述实施例提供的对象管理装置在管理对象时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将对象管理装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的对象管理装置与对象管理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图5是本发明实施例提供的一种终端500的结构框图。该终端500可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端500还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端500包括有:处理器501和存储器502。
处理器501可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器501可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器501也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器501可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器501还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器502可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器502还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器502中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器501所执行以实现本发明的方法实施例提供的对象管理方法。
在一些实施例中,终端500还可选包括有:外围设备接口503和至少一个外围设备。处理器501、存储器502和外围设备接口503之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口503相连。具体地,外围设备包括:射频电路504、触摸显示屏505、摄像头506、音频电路507、定位组件508和电源509中的至少一种。
外围设备接口503可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器501和存储器502。在一些实施例中,处理器501、存储器502和外围设备接口503被集成在同一芯片或电路板上;在一些其他实施例中,处理器501、存储器502和外围设备接口503中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路504用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路504通过电磁信号与通信网络以及其他通信设备进行通信。射频电路504将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路504包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路504可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路504还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏505用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏505是触摸显示屏时,显示屏505还具有采集在显示屏505的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器501进行处理。此时,显示屏505还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏505可以为一个,设置终端500的前面板;在另一些实施例中,显示屏505可以为至少两个,分别设置在终端500的不同表面或呈折叠设计;在再一些实施例中,显示屏505可以是柔性显示屏,设置在终端500的弯曲表面上或折叠面上。甚至,显示屏505还可以设置成非矩形的不规则图形,也即异形屏。显示屏505可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件506用于采集图像或视频。可选地,摄像头组件506包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件506还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路507可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器501进行处理,或者输入至射频电路504以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端500的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器501或射频电路504的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路507还可以包括耳机插孔。
定位组件508用于定位终端500的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件508可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或俄罗斯的伽利略系统的定位组件。
电源509用于为终端500中的各个组件进行供电。电源509可以是交流电、直流电、一次性电池或可充电电池。当电源509包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端500还包括有一个或多个传感器510。该一个或多个传感器510包括但不限于:加速度传感器511、陀螺仪传感器512、压力传感器513、指纹传感器514、光学传感器515以及接近传感器516。
加速度传感器511可以检测以终端500建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器511可以用于检测重力加速度在三个坐标轴上的分量。处理器501可以根据加速度传感器511采集的重力加速度信号,控制触摸显示屏505以横向视图或纵向视图进行用户界面的显示。加速度传感器511还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器512可以检测终端500的机体方向及转动角度,陀螺仪传感器512可以与加速度传感器511协同采集用户对终端500的3D动作。处理器501根据陀螺仪传感器512采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器513可以设置在终端500的侧边框和/或触摸显示屏505的下层。当压力传感器513设置在终端500的侧边框时,可以检测用户对终端500的握持信号,由处理器501根据压力传感器513采集的握持信号进行左右手识别或快捷操作。当压力传感器513设置在触摸显示屏505的下层时,由处理器501根据用户对触摸显示屏505的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器514用于采集用户的指纹,由处理器501根据指纹传感器514采集到的指纹识别用户的身份,或者,由指纹传感器514根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器501授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器514可以被设置终端500的正面、背面或侧面。当终端500上设置有物理按键或厂商Logo时,指纹传感器514可以与物理按键或厂商Logo集成在一起。
光学传感器515用于采集环境光强度。在一个实施例中,处理器501可以根据光学传感器515采集的环境光强度,控制触摸显示屏505的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏505的显示亮度;当环境光强度较低时,调低触摸显示屏505的显示亮度。在另一个实施例中,处理器501还可以根据光学传感器515采集的环境光强度,动态调整摄像头组件506的拍摄参数。
接近传感器516,也称距离传感器,通常设置在终端500的前面板。接近传感器516用于采集用户与终端500的正面之间的距离。在一个实施例中,当接近传感器516检测到用户与终端500的正面之间的距离逐渐变小时,由处理器501控制触摸显示屏505从亮屏状态切换为息屏状态;当接近传感器516检测到用户与终端500的正面之间的距离逐渐变大时,由处理器501控制触摸显示屏505从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图5中示出的结构并不构成对终端500的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例性实施例中,还提供了一种存储有计算机程序的计算机可读存储介质,例如存储有计算机程序的存储器,上述计算机程序被处理执行时实现上述实施例中所示的对象管理方法。例如,上述计算机可读存储介质可以是只读内存(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、只读光盘(Compact Disc Read-OnlyMemory,CD-ROM)、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种对象管理方法,其特征在于,所述方法包括:
当第一对象已经释放时,将所述第一对象的首地址内存空间存储的原始类替换为监控类,所述第一对象是指待监控的任一对象,所述首地址内存空间是指所述第一对象占用的内存段的首地址对应的内存空间,所述原始类是指所述第一对象所属的类,所述监控类是指用于监控已释放的第一对象的消息的类;
当接收到消息发送指令时,访问所述消息发送指令携带的野指针对应的首地址内存空间,得到所述监控类,所述野指针是指引用所述第一对象的指针,所述野指针指向所述首地址;
确定所述监控类的对象,得到第二对象;
由所述第二对象响应所述消息发送指令携带的消息。
2.根据权利要求1所述的方法,其特征在于,所述由所述第二对象响应所述消息发送指令携带的消息,包括:
由所述第二对象拦截所述消息;或,
由所述第二对象将所述消息转发给第三对象,所述第三对象是指用于接收已释放的第一对象的消息的对象;或,
由所述第二对象替换所述消息中的参数,并将替换后的消息转发给第三对象。
3.根据权利要求1所述的方法,其特征在于,所述由所述第二对象响应所述消息发送指令携带的消息之前,所述方法还包括:
向所述第一对象占用的内存段中所述首地址内存空间以外的内存空间填充预设数据。
4.根据权利要求1所述的方法,其特征在于,所述由所述第二对象响应所述消息发送指令携带的消息之后,所述方法还包括:
确定调用所述消息发送指令的函数;
在调用栈中记录所述函数的名称和/或地址。
5.根据权利要求1所述的方法,其特征在于,所述将所述第一对象的首地址内存空间存储的原始类替换为监控类之前,所述方法还包括:
当任一对象释放时,获取所述对象所属的类;
当所述类属于预设白名单时,确定所述对象为第一对象,所述预设白名单包括至少一种待监控的类。
6.根据权利要求1所述的方法,其特征在于,所述将所述第一对象的首地址内存空间存储的原始类替换为监控类,包括:
当所述监控管理类已创建对象时,将所述第一对象的首地址内存空间存储的原始类替换为监控类;或,
当所述监控管理类未创建对象时,基于所述监控类创建第二对象,将所述第一对象的首地址内存空间存储的原始类替换为监控类。
7.一种对象管理装置,其特征在于,所述装置包括:
替换模块,用于当第一对象已经释放时,将所述第一对象的首地址内存空间存储的原始类替换为监控类,所述第一对象是指待监控的任一对象,所述首地址内存空间是指所述第一对象占用的内存段的首地址对应的内存空间,所述原始类是指所述第一对象所属的类,所述监控类是指用于监控已释放的第一对象的消息的类;
访问模块,用于当接收到消息发送指令时,访问所述消息发送指令携带的野指针对应的首地址内存空间,得到所述监控类,所述野指针是指引用所述第一对象的指针,所述野指针指向所述首地址;
确定模块,用于确定所述监控类的对象,得到第二对象;
响应模块,用于由所述第二对象响应所述消息发送指令携带的消息。
8.根据权利要求7所述的装置,其特征在于,所述响应模块,用于由所述第二对象拦截所述消息;或,由所述第二对象将所述消息转发给第三对象,所述第三对象是指用于接收已释放的第一对象的消息的对象;或,由所述第二对象替换所述消息中的参数,并将替换后的消息转发给第三对象。
9.根据权利要求7所述的装置,其特征在于,所述装置还包括:
填充模块,用于向所述第一对象占用的内存段中所述首地址内存空间以外的内存空间填充预设数据。
10.根据权利要求7所述的装置,其特征在于,所述确定模块,还用于确定调用所述消息发送指令的函数;所述装置还包括:
记录模块,用于在调用栈中记录所述函数的名称和/或地址。
11.根据权利要求7所述的装置,其特征在于,所述装置还包括:
获取模块,用于当任一对象释放时,获取所述对象所属的类;
所述确定模块,还用于当所述类属于预设白名单时,确定所述对象为第一对象,所述预设白名单包括至少一种待监控的类。
12.根据权利要求7所述的装置,其特征在于,所述替换模块,还用于当所述监控管理类已创建对象时,将所述第一对象的首地址内存空间存储的原始类替换为监控类;或,当所述监控管理类未创建对象时,基于所述监控类创建第二对象,将所述第一对象的首地址内存空间存储的原始类替换为监控类。
13.一种终端,其特征在于,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如权利要求1至权利要求6任一项所述的对象管理方法所执行的操作。
14.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现如权利要求1至权利要求6任一项所述的对象管理方法所执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711435711.1A CN108132817B (zh) | 2017-12-26 | 2017-12-26 | 对象管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711435711.1A CN108132817B (zh) | 2017-12-26 | 2017-12-26 | 对象管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108132817A true CN108132817A (zh) | 2018-06-08 |
CN108132817B CN108132817B (zh) | 2020-07-10 |
Family
ID=62392783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711435711.1A Active CN108132817B (zh) | 2017-12-26 | 2017-12-26 | 对象管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108132817B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111026441A (zh) * | 2018-10-09 | 2020-04-17 | 卡西欧计算机株式会社 | 电子设备、信息处理方法以及存储有信息处理程序的存储介质 |
CN112732513A (zh) * | 2019-10-28 | 2021-04-30 | 腾讯科技(深圳)有限公司 | 内存监控方法、装置、计算机可读存储介质和计算机设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5923877A (en) * | 1996-05-01 | 1999-07-13 | Electronic Data Systems Corporation | Object-oriented programming memory management framework and method |
CN103309796A (zh) * | 2012-03-09 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 一种组件对象模型对象的监控方法和装置 |
CN104346267A (zh) * | 2013-08-08 | 2015-02-11 | 腾讯科技(深圳)有限公司 | 生成程序缺陷定位信息的方法及装置 |
-
2017
- 2017-12-26 CN CN201711435711.1A patent/CN108132817B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5923877A (en) * | 1996-05-01 | 1999-07-13 | Electronic Data Systems Corporation | Object-oriented programming memory management framework and method |
CN103309796A (zh) * | 2012-03-09 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 一种组件对象模型对象的监控方法和装置 |
CN104346267A (zh) * | 2013-08-08 | 2015-02-11 | 腾讯科技(深圳)有限公司 | 生成程序缺陷定位信息的方法及装置 |
Non-Patent Citations (1)
Title |
---|
SINDRI的小巢: ""质量监控-野指针定位"", 《简书》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111026441A (zh) * | 2018-10-09 | 2020-04-17 | 卡西欧计算机株式会社 | 电子设备、信息处理方法以及存储有信息处理程序的存储介质 |
CN111026441B (zh) * | 2018-10-09 | 2023-09-29 | 卡西欧计算机株式会社 | 电子设备、信息处理方法以及存储有信息处理程序的存储介质 |
CN112732513A (zh) * | 2019-10-28 | 2021-04-30 | 腾讯科技(深圳)有限公司 | 内存监控方法、装置、计算机可读存储介质和计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN108132817B (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108845856B (zh) | 基于对象的同步更新方法、装置、存储介质及设备 | |
CN108536463A (zh) | 获取资源包的方法、装置、设备及计算机可读存储介质 | |
CN108710496A (zh) | 应用程序的配置更新方法、装置、设备及存储介质 | |
CN110362328A (zh) | Ota升级的方法、装置和计算机设备 | |
CN110502308A (zh) | 页面样式切换方法、装置、计算机设备及存储介质 | |
CN107888968A (zh) | 直播视频的播放方法、装置及计算机存储介质 | |
CN108762881A (zh) | 界面绘制方法、装置、终端及存储介质 | |
CN110243386A (zh) | 导航信息显示方法、装置、终端及存储介质 | |
CN108959361A (zh) | 表单管理的方法和装置 | |
CN110515688A (zh) | 页面显示方法、装置、终端及存储介质 | |
CN108900925A (zh) | 设置直播模板的方法和装置 | |
CN111897525A (zh) | 大数据处理方法及系统 | |
CN107896337A (zh) | 信息推广方法、装置及存储介质 | |
CN110288689A (zh) | 对电子地图进行渲染的方法和装置 | |
CN110032384A (zh) | 资源更新的方法、装置、设备及存储介质 | |
CN110535890A (zh) | 文件上传的方法和装置 | |
CN110109770A (zh) | 调试方法、装置、电子设备及介质 | |
CN108132817A (zh) | 对象管理方法及装置 | |
CN109858237A (zh) | 音频数据采集方法、装置、终端及存储介质 | |
CN109684123A (zh) | 问题资源定位方法、装置、终端及存储介质 | |
CN107943484A (zh) | 执行业务功能的方法和装置 | |
CN109783176A (zh) | 切换页面的方法和装置 | |
CN111265885B (zh) | 资源显示方法、资源发送方法、装置、设备及存储介质 | |
CN114741256A (zh) | 传感器监听方法、装置及终端设备 | |
CN110222506A (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 |