CN110597737B - 数据处理方法、装置、存储介质及电子设备 - Google Patents
数据处理方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN110597737B CN110597737B CN201910778812.1A CN201910778812A CN110597737B CN 110597737 B CN110597737 B CN 110597737B CN 201910778812 A CN201910778812 A CN 201910778812A CN 110597737 B CN110597737 B CN 110597737B
- Authority
- CN
- China
- Prior art keywords
- data processing
- life cycle
- event
- processing method
- life
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种数据处理方法、装置、存储介质及电子设备。该数据处理方法可以包括:通过第一对象监听第二对象的生命周期事件,其中,该第一对象引用该第二对象,该第一对象的生命周期长于该第二对象的生命周期;检测是否监听到该第二对象的生命周期结束事件;若监听到该第二对象的生命周期结束事件,则注销该第一对象对该第二对象的引用。本申请可以有效避免在短生命周期对象的生命周期结束后因长生命周期对象仍然持有该短生命周期对象的引用而引起的内存泄漏。
Description
技术领域
本申请属于电子设备技术领域,尤其涉及一种数据处理方法、装置、存储介质及电子设备。
背景技术
内存泄漏(Memory Leak)是指程序在申请内存后,由于某种原因未释放或无法释放已申请的内存空间,造成系统内存被长时间占用的情况。内存泄露会造成内存的浪费,进而导致系统运行缓慢、卡顿等,甚至会引起系统崩溃等问题。长生命周期对象持有短生命周期对象的引用容易引起内存泄漏。
发明内容
本申请实施例提供一种数据处理方法、装置、存储介质及电子设备,可以有效避免在短生命周期对象的生命周期结束后因长生命周期对象仍然持有该短生命周期对象的引用而引起的内存泄漏。
第一方面,本申请实施例提供一种数据处理方法,包括:
通过第一对象监听第二对象的生命周期事件,其中,所述第一对象引用所述第二对象,所述第一对象的生命周期长于所述第二对象的生命周期;
检测是否监听到所述第二对象的生命周期结束事件;
若监听到所述第二对象的生命周期结束事件,则注销所述第一对象对所述第二对象的引用。
第二方面,本申请实施例提供一种数据处理装置,包括:
监听单元,用于通过第一对象监听第二对象的生命周期事件,其中,所述第一对象引用所述第二对象,所述第一对象的生命周期长于所述第二对象的生命周期;
检测单元,用于检测是否监听到所述第二对象的生命周期结束事件;
注销单元,用于若监听到所述第二对象的生命周期结束事件,则注销所述第一对象对所述第二对象的引用。
第三方面,本申请实施例提供一种存储介质,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本申请提供的数据处理方法中的流程。
第四方面,本申请实施例还提供一种电子设备,包括:存储器、处理器及存储在所述存储器上,并可在所述处理器上运行的数据处理程序,所述数据处理程序被所述处理器执行时实现本申请提供的数据处理方法中的流程。
在本申请实施例中,由于具有长生命周期的第一对象可以在监听到具有短生命周期的第二对象的生命周期结束事件时,主动注销对该第二对象的引用,从而可以避免在短生命周期对象的生命周期结束后因长生命周期对象依然持有对该短生命周期对象的引用所引起的短生命周期对象占用的系统内存无法被系统回收的事件发生,即本实施例可以有效避免在短生命周期对象的生命周期结束后因长生命周期对象依然持有对该短生命周期对象的引用而引起的内存泄露。
附图说明
下面结合附图,通过对本申请的具体实施方式详细描述,将使本申请的技术方案及其有益效果显而易见。
图1a为相关技术中长生命周期对象注销对短生命周期对象的引用的交互示意图。
图1b为相关技术中长生命周期对象注销对短生命周期对象的引用的流程示意图。
图2a是本申请实施例提供的数据处理方法的第一种流程示意图。
图2b是本申请实施例提供的数据处理方法的第一种交互示意图。
图3a为本申请实施例提供的数据处理方法的第二种流程示意图。
图3b为本申请实施例提供的数据处理方法的第二种交互示意图。
图4为本申请实施例提供的数据处理方法的第三种交互示意图。
图5a为本申请实施例提供的数据处理装置的第一种结构示意图。
图5b为本申请实施例提供的数据处理装置的第二种结构示意图。
图6为本申请实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请中的术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例提供一种数据处理方法,该数据处理方法的执行主体可以是本申请实施例提供的数据处理装置,或者集成了该数据处理装置的电子设备,其中该数据处理装置可以采用硬件或者软件的方式实现。其中,电子设备可以是智能手机、平板电脑、掌上电脑、笔记本电脑、或者台式电脑等设备。
以下将分别进行详细说明,以下各个实施例的描述先后顺序并不构成对具体实施例先后顺序的限定。
类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例可以称为对象。
类的内部封装了方法,用于操作自身的成员。类是对某种对象的定义,具有行为(behavior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、方法、属性和事件。
请参阅图1a,图1a为相关技术中长生命周期对象注销对短生命周期对象的引用的交互示意图。
如图1a所示,在长生命周期对象引用短生命周期对象后,该短生命周期对象会在内部监听自身的生命周期事件。
需要说明的是,以安卓(Android)操作系统为例,程序中的对象的生命周期有一个从创建到结束的过程。例如,继承了Context接口的Context对象的生命周期事件一般包括创建(onCreate)事件、开始(onStart)事件、恢复(onResume)事件、暂停(onPause)事件、停止(onStop)事件和注销(onDestroy)事件等。当一个对象的生命周期达到注销事件时,表示该对象的生命周期结束,该对象即将被系统注销回收。可以理解的是,在不同的操作系统中,对象的生命周期事件可以有不同的名称。另外,本实施例中,长生命周期和短生命周期是相对而言的,长生命周期和短生命周期均无特定的时间长度的限定。
在短生命周期对象监听到自身的生命周期结束事件后,该短生命周期对象会主动请求长生命周期对象注销对自身的引用。
在长生命周期对象注销对短生命周期对象的引用后,系统会回收该短生命周期对象,并释放该短生命周期对象所占用的系统内存。
上述流程也可以如图1b中的101至106所示。
然而,相关技术中,长生命周期对象注销对短生命周期对象的引用依赖于短生命周期对象在监听到自身的生命周期结束事件时,由该短生命周期对象主动请求该长生命周期对象注销对自身的引用。但在编程人员的编码过程中,上述由短生命周期对象主动请求长生命周期对象注销对自身的引用这一过程容易被编程人员遗漏,导致长生命周期对象在短生命周期对象的生命周期结束时依然持有对该短生命周期对象的引用,使得该短生命周期对象无法被系统回收,从而导致该短生命周期对象占用的内存无法被系统回收,并由此引发内存泄露的问题。
请参阅图2a至2b,图2a是本申请实施例提供的数据处理方法的第一种流程示意图,图2b是本申请实施例提供的数据处理方法的第一种交互示意图。本实施例提供的数据处理方法的第一种流程可以包括:
201、通过第一对象监听第二对象的生命周期事件,其中,所述第一对象引用所述第二对象,所述第一对象的生命周期长于所述第二对象的生命周期。
比如,本申请实施例中,第一对象为长生命周期对象,第二对象为短生命周期对象。在长生命周期的第一对象引用短生命周期的第二对象后,可以由该第一对象监听该第二对象的生命周期事件。
202、检测是否监听到所述第二对象的生命周期结束事件。
比如,在第一对象监听第二对象的生命周期事件的过程中,该第一对象可以检测是否监听到该第二对象的生命周期结束事件。
若未监听到第二对象的生命周期结束事件,则第一对象可以继续监听该第二对象发生的生命周期事件。
若监听到第二对象的生命周期结束事件,则可以进入203中。
203、若监听到所述第二对象的生命周期结束事件,则注销所述第一对象对所述第二对象的引用。
比如,第一对象监听到第二对象生命周期中的生命周期结束事件,那么该第一对象可以主动注销对该第二对象的引用。也即,本实施例中,当长生命周期对象监听到短生命周期对象的生命周期结束事件后,该长生命周期对象可以主动注销对该短生命周期对象的引用。
需要说明的是,在本申请实施例中,由于具有长生命周期的第一对象可以在监听到具有短生命周期的第二对象的生命周期结束事件时,主动注销对该第二对象的引用,从而可以避免在短生命周期对象的生命周期结束后因长生命周期对象依然持有对该短生命周期对象的引用所引起的短生命周期对象占用的系统内存无法被系统回收的事件发生,即本实施例可以有效避免在短生命周期对象的生命周期结束后因长生命周期对象依然持有对该短生命周期对象的引用而引起的内存泄露。
请参阅图3a,图3a为本申请实施例提供的数据处理方法的第二种流程示意图,图3b为本申请实施例提供的数据处理方法的第二种交互示意图。本实施例提供的数据处理方法的第二种流程可以包括:
301、第二对象对第一对象进行观察,其中,所述第一对象的生命周期长于所述第二对象的生命周期。
在本申请实施例中,第一对象的生命周期可以长于第二对象的生命周期。即,第一对象可以为长生命周期对象,而第二对象可以为短生命周期对象。需要说明的是,本实施例中,长生命周期和短生命周期是相对而言的,长生命周期和短生命周期均无特定的时间长度的限定。
在一些实施方式中,以安卓(Android)操作系统为例,长生命周期对象可以是处于单例模式的对象。需要说明的是,单例模式是一种常见的软件设计模式。在某个类使用单例模式时,整个系统必须保证有且仅有一个该类的实例对象。单例模式的使用可以使得某个类不被频繁的创建和回收,并能被系统中的其他对象方便地引用到,因此单例模式对象一旦被创建,可能会长期存在于系统内存中,即处于单例模式的对象具有较长的生命周期。
而短生命周期对象可以是Context对象。需要说明的是,Context指上下文环境。在程序中,Context意为当前对象在程序中所处的环境。在安卓操作系统中,Context特指安卓系统提供的一种抽象接口,开发者可以通过该接口申请系统资源、进行系统级操作等。在安卓操作系统中,继承了Context接口的Context对象的生命周期具有从被创建到被注销的几个阶段,分别为:onCreate、onStart、onResume、onPause、onStop、onDestroy。当一个Context对象的生命周期到达onDestroy时,表示该Context对象的生命周期结束,该Context对象即将被系统注销回收。
比如,本实施例中,第二对象可以对第一对象进行观察。
302、基于第二对象对第一对象的观察,该第一对象引用该第二对象。
比如,在第二对象对第一对象进行观察后,可以引起该第一对象引用该第二对象。即,基于该第二对象对该第一对象的观察,该第一对象可以引用该第二对象。
303、在观察者模式下,赋予第一对象观察者角色,并赋予第二对象被观察者角色。
比如,在具有长生命周期的第一对象引用具有短生命周期的第二对象后,系统可以在观察者模式下赋予该第一对象观察者角色,并赋予该第二对象被观察者角色。
304、基于观察者角色和被观察者角色,第一对象发送监听器对象至第二对象,以使该第一对象利用该监听器对象监听该第二对象的生命周期事件。
比如,在系统赋予第一对象观察者角色,并赋予第二对象被观察者角色后,第一对象可以发送监听器对象至第二对象,以使该第一对象可以利用该监听器对象监听该第二对象的生命周期事件。
需要说明的是,观察者模式是一种常见的软件设计模式。观察者模式存在两种角色:观察者和被观察者。其中,被观察者主动产生事件,观察者被动监听事件。整个过程可以分为三个阶段:开始观察、被观察、撤销观察。
其中,在开始观察阶段,观察者可以向被观察者发送一个监听器对象,被观察者将从观察者处接收到的监听器对象收纳在一个监听器对象容器中。需要说明的是,监听器类一般是继承了一个特定接口的类,实现该监听器类的对象为监听器对象。利用监听器对象可以实现监听功能。
在被观察阶段,当被观察者产生事件后,被观察者可以向监听器对象容器中的监听器对象广播事件,观察者通过监听器对象即可获取到被观察者产生的事件(如被观察者的生命周期事件等)。
在撤销观察阶段,当观察者不再需要观察时,观察者可以向被观察者注销监听器对象,被观察者将其监听器对象容器中收纳的该观察者的监听器对象移除。该观察者将不再接收到该被观察者产生的事件。
305、第一对象检测是否监听到第二对象的生命周期结束事件。
比如,在第一对象监听第二对象的生命周期事件的过程中,该第一对象可以检测是否监听到该第二对象的生命周期结束事件。
例如,以安卓操作系统为例,第一对象为处于单例模式的对象,而第二对象为继承了Context接口的Context对象。那么,在第一对象监听第二对象的生命周期事件的过程中,该第一对象可以检测是否监听到该第二对象生命周期中的onDestroy事件。
若未监听到第二对象的生命周期结束事件,则第一对象可以继续监听该第二对象发生的生命周期事件。
若监听到第二对象的生命周期结束事件,则可以进入306中。
306、若监听到第二对象的生命周期结束事件,则第一对象注销对该第二对象的引用。
比如,第一对象通过发送给第二对象的监听器对象监听到了该第二对象的生命周期结束事件。在这种情况下,第一对象可以主动注销对第二对象的引用。
可以理解的是,本实施例中,由于具有长生命周期的第一对象可以在监听到具有短生命周期的第二对象的生命周期结束事件时,主动注销对该第二对象的引用,从而可以有效避免在短生命周期对象的生命周期结束后因长生命周期对象依然持有对该短生命周期对象的引用而引起的内存泄露。
在一种实施方式中,第一对象在注销对第二对象的引用时,该第一对象可以通过主动执行一预设的方法来解除对该第二对象的引用。
307、第一对象撤销对第二对象的观察。
比如,在监听到第二对象的生命周期结束事件后,第一对象还可以撤销对该第二对象的观察。即,第一对象可以向第二对象注销监听器对象,该第二对象可以将其监听器对象容器中收纳的来自该第一对象的监听器对象移除。
308、第二对象注销对第一对象的引用。
由于被观察者可以引用观察者,因此在将观察者角色赋予第一对象,将被观察者角色赋予第二对象后,该第二对象可以引用该第一对象。
在本实施例中,在监听到第二对象的生命周期结束事件后,该第二对象还可以注销对第一对象的引用。
309、第二对象撤销对第一对象的观察。
在本实施例中,由于第一对象对第二对象的引用是由于第二对象对第一对象进行了观察所引起的,因此在监听到第二对象的生命周期结束事件后,该第二对象还可以撤销对该第一对象的观察。
需要说明的是,在本实施例中,上述流程307、308以及309均是在第二对象产生生命周期结束事件后执行的流程。但是,307、308、309在执行顺序上可以没有先后之分。即,307、308、309可以并行执行,也可以分开执行。比如,系统可以先执行流程307,再执行流程308,之后再执行流程309。或者,系统可以先执行流程307,再执行流程309,之后再执行流程308。或者,系统可以先执行流程308,再执行流程307,之后再执行流程309。或者,系统可以先执行流程308,再执行流程309,之后再执行流程307。或者,系统可以先执行流程309,再执行流程307,之后再执行流程308。或者,系统可以先执行流程309,再执行流程308,之后再执行流程307,等等。
需要说明的是,在另一种实施方式中,也可以不执行上述流程307、308、309。因为第一对象在注销对第二对象的引用后,就可以有效避免在第二对象的生命周期结束后因第一对象依然持有对该第二对象的引用所引起的内存泄露。若第二对象没有撤销对第一对象的观察,但由于第二对象已经产生生命周期结束事件,因此第二对象不会再主动发起对第一对象的观察,即在第二对象已经产生生命周期结束事件后,第一对象不会再引用第二对象。
需要说明的是,第二对象可以具有用于记载被应用次数的计数器。例如,第二对象的用于记载其被引用次数的计数器的数值为N。当第二对象被某一对象引用后,该计数器的数值由N变为N+1。
以第二对象仅被第一对象引用为例,在第一对象注销了对第二对象的引用后,第二对象的用于记载被引用次数的计数器的数值将由1变为0。当系统检测到第二对象的用于记载被引用次数的计数器的数值变为0后,系统将回收第二对象,并释放该第二对象占用的内存,从而可以避免内存泄露。
另外,即便第一对象没有撤销对第二对象的观察,即第二对象引用了第一对象,但由于第二对象的用于记载被引用次数的计数器的数值变为了0,因此系统仍然会回收第二对象,并释放该第二对象占用的内存。
需要说明的是,若短生命周期的第二对象被多个具有长生命周期的对象引用,比如,第二对象除了被第一对象引用外,还被具有长生命周期的第三对象和第四对象引用。那么,第一对象、第三对象、第四对象均可以在对第二对象进行引用后,监听该第二对象的生命周期事件,并在监听到该第二对象的生命周期结束事件时主动注销对该第二对象的引用。例如,当第二对象被第一对象、第三对象、第四对象引用时,第二对象的用于记载被引用次数的计数器的数值为3。在第一对象注销对第二对象的引用后,第二对象的该计数器的数值由3变为2。在第三对象注销对第二对象的引用后,第二对象的该计数器的数值由2变为1。在第四对象注销对第二对象的引用后,第二对象的该计数器的数值由1变为0。当第二对象的该计数器的数值变为0后,表示该第二对象不再被任何其他对象引用,在这种情况下,系统可以回收该第二对象,并释放该第二对象占用的内存。
请参阅图4,图4为本申请实施例提供的数据处理方法的第三种交互示意图。在图4中,以安卓系统中长生命周期对象为系统中某个类的处于单例模式的对象(以下称为单例对象),短生命周期对象为系统中继承了Context接口的对象(以下称为Context对象)为例进行说明。其中,单例对象和Context对象可以是同一个程序中的两个对象。
由于Context对象对单例对象进行了观察,引起该单例对象引用该Context对象。在单例对象引用Context对象后,在观察者模式下,系统可以赋予该单例对象以观察者角色,并赋予该Context对象以被观察者角色。即,单例对象对Context对象进行观察。由于单例对象对Context对象进行了观察,因此该Context对象可以引用该单例对象。
具有观察者角色的单例对象可以发送监听器对象到具有被观察者角色的Context对象。Context对象可以将接收到的监听器对象收纳到其监听器对象容器中。在Context对象产生诸如生命周期事件等事件后,该Context对象可以向监听器对象容器中收纳的监听器对象广播这些事件,从而使单例对象可以获取到Context对象产生的事件。即,通过发送给Context对象的监听器对象,单例对象可以监听到该Context对象的生命周期事件。
在单例对象监听Context对象的生命周期事件的过程中,该单例对象可以检测是否监听到Context对象的生命周期结束事件,如检测是否监听到该Context对象生命周期中的onDestroy事件。
当监听到Context对象生命周期中的onDestroy事件后,单例对象可以主动注销对该Context对象的引用。并且,单例对象可以撤销对Context对象的观察。而Context对象也可以注销对单例对象的引用,以及该Context对象可以撤销对该单例对象的观察。
为了实施以上方法,本发明实施例还提供一种数据处理装置,该数据处理装置可以集成在诸如智能手机、平板电脑等终端设备中。
请参阅图5a,图5a为本申请实施例提供的数据处理装置的第一种结构示意图。该数据处理装置500可以包括:监听单元501,检测单元502,注销单元503。其中:
监听单元501,用于通过第一对象监听第二对象的生命周期事件,其中,所述第一对象引用所述第二对象,所述第一对象的生命周期长于所述第二对象的生命周期。
检测单元502,用于检测是否监听到所述第二对象的生命周期结束事件。
注销单元503,用于若监听到所述第二对象的生命周期结束事件,则注销所述第一对象对所述第二对象的引用。
请参阅图5b,图5b为本申请实施例提供的数据处理装置的第二种结构示意图。在一种实施方式中,所述监听单元501可以包括:赋予子单元5011,发送子单元5012。其中:
赋予子单元5011,用于在观察者模式下,赋予所述第一对象观察者角色,并赋予所述第二对象被观察者角色。
发送子单元5012,用于基于所述观察者角色和所述被观察者角色,由所述第一对象发送监听器对象至所述第二对象,以使所述第一对象利用所述监听器对象监听所述第二对象的生命周期事件。
在一种实施方式中,所述注销单元503还可以用于:在监听到所述第二对象的生命周期结束事件之后,所述第一对象撤销对所述第二对象的观察。
在一种实施方式中,所述第一对象对所述第二对象的引用是由所述第二对象对所述第一对象进行观察引起的。所述注销单元503还可以用于:在监听到所述第二对象的生命周期结束事件之后,所述第二对象撤销对所述第一对象的观察。
在一种实施方式中,所述注销单元503还可以用于:在监听到所述第二对象的生命周期结束事件之后,注销所述第二对象对所述第一对象的引用。
在一种实施方式中,在应用于安卓操作系统时,所述第一对象可以为处于单例模式下的对象,所述第二对象可以为Context对象。
在实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
应当说明的是,本申请实施例提供的数据处理装置与上文实施例中的数据处理方法属于同一构思,在数据处理装置上可以运行数据处理方法实施例中提供的任一方法,其具体实现过程详见数据处理方法实施例,此处不再赘述。
本申请实施例提供一种计算机可读的存储介质,其上存储有计算机程序,当所述计算机程序在计算机上执行时,使得所述计算机执行如本实施例提供的数据处理方法中的流程。
本申请实施例还提供一种电子设备,包括存储器,处理器,所述处理器通过调用所述存储器中存储的计算机程序,用于执行本实施例提供的数据处理方法中的流程。
例如,上述电子设备可以是诸如平板电脑或者智能手机等移动终端。请参阅图6,图6为本申请实施例提供的电子设备的结构示意图。
该电子设备可以包括具有一个或者一个以上处理核心的处理器601、一个或一个以上计算机可读存储介质的存储器602、电源603和输入单元604等部件。本领域技术人员可以理解,图6中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器601是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器602内的软件程序和/或模块,以及调用存储在存储器602内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器601可包括一个或多个处理核心;优选的,处理器601可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器601中。
存储器602可用于存储软件程序以及模块,处理器601通过运行存储在存储器602的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器602可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器602可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器602还可以包括存储器控制器,以提供处理器601对存储器602的访问。
电子设备还包括给各个部件供电的电源603,优选的,电源603可以通过电源管理系统与处理器601逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源603还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入单元604,该输入单元604可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器601会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器602中,并由处理器601来运行存储在存储器602中的应用程序,从而实现各种功能,如下:
通过第一对象监听第二对象的生命周期事件,其中,所述第一对象引用所述第二对象,所述第一对象的生命周期长于所述第二对象的生命周期;
检测是否监听到所述第二对象的生命周期结束事件;
若监听到所述第二对象的生命周期结束事件,则注销所述第一对象对所述第二对象的引用。
在一种实施方式中,处理器401通过运行存储在存储器402中的应用程序,还可以实现如下功能:
在观察者模式下,赋予所述第一对象观察者角色,并赋予所述第二对象被观察者角色;
基于所述观察者角色和所述被观察者角色,由所述第一对象发送监听器对象至所述第二对象,以使所述第一对象利用所述监听器对象监听所述第二对象的生命周期事件。
在一种实施方式中,处理器401通过运行存储在存储器402中的应用程序,还可以实现如下功能:
所述第一对象撤销对所述第二对象的观察。
在一种实施方式中,所述第一对象对所述第二对象的引用是由所述第二对象对所述第一对象进行观察引起的。处理器401通过运行存储在存储器402中的应用程序,还可以实现如下功能:
所述第二对象撤销对所述第一对象的观察。
在一种实施方式中,处理器401通过运行存储在存储器402中的应用程序,还可以实现如下功能:
注销所述第二对象对所述第一对象的引用。
在一种实施方式中,在应用于安卓操作系统时,所述第一对象为处于单例模式下的对象,所述第二对象为Context对象。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见上文针对数据处理方法的详细描述,此处不再赘述。
本申请实施例提供的所述数据处理装置与上文实施例中的数据处理方法属于同一构思,在所述数据处理装置上可以运行所述数据处理方法实施例中提供的任一方法,其具体实现过程详见所述数据处理方法实施例,此处不再赘述。
需要说明的是,对本申请实施例所述数据处理方法而言,本领域普通技术人员可以理解实现本申请实施例所述数据处理方法的全部或部分流程,是可以通过计算机程序来控制相关的硬件来完成,所述计算机程序可存储于一计算机可读取存储介质中,如存储在存储器中,并被至少一个处理器执行,在执行过程中可包括如所述数据处理方法的实施例的流程。其中,所述的存储介质可以为磁碟、光盘、只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)等。
对本申请实施例的所述数据处理装置而言,其各功能模块可以集成在一个处理芯片中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中,所述存储介质譬如为只读存储器,磁盘或光盘等。
以上对本申请实施例所提供的一种数据处理方法、装置、存储介质以及电子设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (9)
1.一种数据处理方法,其特征在于,所述方法应用于安卓操作系统,包括:
使用计数器记载第二对象的被引用次数,其中,所述第二对象被多个对象引用,所述多个对象的生命周期均长于所述第二对象的生命周期,所述多个对象中包括第一对象,所述第一对象为处于单例模式下的对象,所述第二对象为Context对象;
通过所述第一对象监听所述第二对象的生命周期事件;
检测是否监听到所述第二对象的生命周期结束事件;
若监听到所述第二对象的生命周期结束事件,则注销所述第一对象对所述第二对象的引用;
逐步注销所述多个对象对所述第二对象的引用并更新所述计数器的数值;
当所述计数器的数值为0时,回收所述第二对象并释放所述第二对象占用的内存。
2.根据权利要求1所述的数据处理方法,其特征在于,所述通过第一对象监听第二对象的生命周期事件,包括:
在观察者模式下,赋予所述第一对象观察者角色,并赋予所述第二对象被观察者角色;
基于所述观察者角色和所述被观察者角色,由所述第一对象发送监听器对象至所述第二对象,以使所述第一对象利用所述监听器对象监听所述第二对象的生命周期事件。
3.根据权利要求2所述的数据处理方法,其特征在于,在监听到所述第二对象的生命周期结束事件之后,所述方法还包括:
所述第一对象撤销对所述第二对象的观察。
4.根据权利要求1所述的数据处理方法,其特征在于,所述第一对象对所述第二对象的引用是由所述第二对象对所述第一对象进行观察引起的;
在监听到所述第二对象的生命周期结束事件之后,所述方法还包括:所述第二对象撤销对所述第一对象的观察。
5.根据权利要求2所述的数据处理方法,其特征在于,在监听到所述第二对象的生命周期结束事件之后,所述方法还包括:
注销所述第二对象对所述第一对象的引用。
6.一种数据处理装置,其特征在于,应用于安卓操作系统,所述装置包括:
监听单元,用于使用计数器记载第二对象的被引用次数,其中,所述第二对象被多个对象引用,所述多个对象的生命周期均长于所述第二对象的生命周期,所述多个对象中包括第一对象,所述第一对象为处于单例模式下的对象,所述第二对象为Context对象,通过所述第一对象监听所述第二对象的生命周期事件;
检测单元,用于检测是否监听到所述第二对象的生命周期结束事件;
注销单元,用于若监听到所述第二对象的生命周期结束事件,则注销所述第一对象对所述第二对象的引用,逐步注销所述多个对象对所述第二对象的引用并更新所述计数器的数值,当所述计数器的数值为0时,回收所述第二对象并释放所述第二对象占用的内存。
7.根据权利要求6所述的数据处理装置,其特征在于,所述监听单元包括:
赋予子单元,用于在观察者模式下,赋予所述第一对象观察者角色,并赋予所述第二对象被观察者角色;
发送子单元,用于基于所述观察者角色和所述被观察者角色,由所述第一对象发送监听器对象至所述第二对象,以使所述第一对象利用所述监听器对象监听所述第二对象的生命周期事件。
8.一种存储介质,其特征在于,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至5中任一项所述的数据处理方法中的流程。
9.一种电子设备,其特征在于,包括:存储器、处理器及存储在所述存储器上,并可在所述处理器上运行的数据处理程序,所述数据处理程序被所述处理器执行时实现如权利要求1-5中任一项所述数据处理方法中的流程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910778812.1A CN110597737B (zh) | 2019-08-22 | 2019-08-22 | 数据处理方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910778812.1A CN110597737B (zh) | 2019-08-22 | 2019-08-22 | 数据处理方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597737A CN110597737A (zh) | 2019-12-20 |
CN110597737B true CN110597737B (zh) | 2022-03-08 |
Family
ID=68855113
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910778812.1A Active CN110597737B (zh) | 2019-08-22 | 2019-08-22 | 数据处理方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597737B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499022A (zh) * | 2008-02-01 | 2009-08-05 | 鸿富锦精密工业(深圳)有限公司 | 内存空间释放系统及方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102306119A (zh) * | 2011-06-30 | 2012-01-04 | 北京新媒传信科技有限公司 | 捕获全局异常的系统及方法 |
US9053017B2 (en) * | 2011-09-09 | 2015-06-09 | Microsoft Technology Licensing, Llc | Managing object lifetime in a cyclic graph |
CN107239394A (zh) * | 2016-03-29 | 2017-10-10 | 卓望数码技术(深圳)有限公司 | 一种安卓应用的内存泄露检测方法及装置 |
US10296314B2 (en) * | 2016-11-01 | 2019-05-21 | Facebook, Inc. | Detecting and remedying memory leaks caused by object reference cycles |
CN108182146B (zh) * | 2017-12-27 | 2021-08-24 | 北京奇艺世纪科技有限公司 | 一种内存泄漏的检测方法及系统 |
CN109558308A (zh) * | 2018-09-29 | 2019-04-02 | 中国平安人寿保险股份有限公司 | 应用程序内存泄露检测方法、装置、电子设备及存储介质 |
CN109413507B (zh) * | 2018-09-30 | 2021-05-25 | 武汉斗鱼网络科技有限公司 | 弹幕库与直播间引用关系的处理方法、装置、终端和介质 |
CN109710415B (zh) * | 2018-12-29 | 2023-10-03 | 卓米私人有限公司 | 调用弹窗控件的处理方法、装置及电子设备 |
-
2019
- 2019-08-22 CN CN201910778812.1A patent/CN110597737B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499022A (zh) * | 2008-02-01 | 2009-08-05 | 鸿富锦精密工业(深圳)有限公司 | 内存空间释放系统及方法 |
Non-Patent Citations (2)
Title |
---|
Android内存泄露的本质原因、解决办法、操作实例;阁刚广志;《https://www.cnblogs.com/bellkosmos/p/6291165.html?utm_source=itdadao&utm_medium=referral》;20170116;第1-5页 * |
观察者模式(浅谈监听器工作原理);skylink;《https://www.cnblogs.com/since1499/p/3501916.html》;20140102;第1-4页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110597737A (zh) | 2019-12-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10437631B2 (en) | Operating system hot-switching method and apparatus and mobile terminal | |
KR102148948B1 (ko) | 전자 장치의 멀티 태스킹 방법 및 그 전자 장치 | |
CN105278937B (zh) | 一种显示弹出框消息的方法及装置 | |
CN108702421B (zh) | 用于控制应用和组件的电子设备和方法 | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN102866903A (zh) | 将后台工作和前台工作解耦合 | |
JP2011505042A (ja) | メモリ管理 | |
JP2015507298A5 (zh) | ||
US9304789B2 (en) | Virtual machine control device, virtual machine control method, computer-readable recording medium, and integrated circuit | |
CN107015866B (zh) | 一种数据处理方法及装置 | |
CN107239394A (zh) | 一种安卓应用的内存泄露检测方法及装置 | |
CN107329812B (zh) | 一种运行协程的方法和装置 | |
CN110597737B (zh) | 数据处理方法、装置、存储介质及电子设备 | |
CN114327087A (zh) | 输入事件处理方法、装置、电子设备和存储介质 | |
CN103902383A (zh) | 一种基于继承机制的资源管理器设计方法 | |
US20170086038A1 (en) | Triggering application action using non-standard controls | |
CN105302589B (zh) | 一种获取卸载信息的方法及装置 | |
US10545562B2 (en) | Electronic device and method for operating the same | |
CN110244964A (zh) | 一种基于运维应用的运维方法、运维方法、装置及设备 | |
US9348667B2 (en) | Apparatus for managing application program and method therefor | |
JP5157537B2 (ja) | メモリ管理装置、システム、方法、及び、プログラム | |
CN108874381B (zh) | 一种输出页面视图控制器的方法、装置及电子设备 | |
CN115357433A (zh) | 容器环境下的数据库备份方法、装置、设备及存储介质 | |
CN105786456B (zh) | 一种实现VxWorks任务钩子函数功能的方法及装置 | |
CN108197029A (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 |