单例组件资源释放方法及装置制造方法及图纸

技术编号:13876860 阅读:49 留言:0更新日期:2016-10-22 13:23
本发明专利技术公开了一种单例组件资源释放方法及装置,包括:为单例组件创建计数器和调用者列表;根据所述单例组件的获取方法被不同调用者所调用的次数对所述计数器进行加1运算,并将调用者的调用者信息存入所述调用者列表;根据所述单例组件的资源释放方法被不同调用者所调用的次数对所述计数器进行减1运算,并将调用者的调用者信息从所述调用者列表中删除;当所述计数器的计数为0时,进行针对所述单例组件的资源释放。本发明专利技术提出的单例组件资源释放方法及装置,能够解决单例组件在多个调用者存在的情况下释放资源会引起相互冲突的问题。

【技术实现步骤摘要】

本专利技术涉及数据处理
,特别是指一种单例组件资源释放方法及装置
技术介绍
单例模式是指,当某个组件被创建出来后,再有其它人调用该组件时,不再重复创建,而是将已经创建好的组件的实例返回给调用者,相当于多个调用者共享同一个组件,从而节省重复创建的时间和内存。Android系统中的某些组件,创建耗时较长,占用内存较大,而且调用频繁;为了加快调用速度、节省内存,从而引入了单例模式,这里,使用单例模式来调用的组件,就是单例组件。某些Android组件在使用完毕后,必须调用其释放资源的方法,这个组件的生命周期才算真正结束,从而可以被系统回收;而某些组件一旦被调用过释放资源的方法,它就无法再被其他人使用了,强行调用会违反其生命周期,程序会报错甚至崩溃;若需要再次使用该组件,则需要重新创建。现有技术中需要释放资源的组件包括:数据库和数据库打开工具、线程池、数据库连接池、网络连接池,等等;这些组件以单例模式访问,成为单例组件,可以避免重复创建,节省时间和内存,但是考虑到它们释放资源的特殊性,则会存在以下问题:假设调用者A访问了一个单例模式的数据库,数据库被创建;然后调用者B也访问这个数据库,不重复创建,直接复用已有的,也就是说此时调用者A和调用者B手中的数据库是同一个;然后调用者A使用完毕,调用了数据库的资源释放方法,数据库生命周期结束,进入不可用状态(注意,此时数据库并未销毁,只是不可再用了);但是调用者B并不知道,仍然读取了数据库,此时:因为该数据库还没销毁,所以再有人调用它,在单例模式中不会重新创建,因此无法得到新的、生命周期可用的数据库;因为该数据库的生命周期已结束,进入不可用状态,再调用它,程序会抛出异常,如果代码里没有对这个异常进行压制,则会导致程序崩溃,即使对这个异常进行了压制,调用者B实际上也无法正常使用这个数据库了。
技术实现思路
有鉴于此,本专利技术的目的在于提出一种单例组件资源释放方法及装置,能够解决单例组件在多个调用者存在的情况下释放资源会引起相互冲突的问题。基于上述目的本专利技术提供的单例组件资源释放方法,包括:为单例组件创建计数器和调用者列表;根据所述单例组件的获取方法被不同调用者所调用的次数对所述计数器进行加1运算,并将调用者的调用者信息存入所述调用者列表;根据所述单例组件的资源释放方法被不同调用者所调用的次数对所述计数器进行减1运算,并将调用者的调用者信息从所述调用者列表中删除;当所述计数器的计数为0时,进行针对所述单例组件的资源释放。在一些实施方式中,所述根据所述单例组件的获取方法被不同调用者所调用的次数对所述计数器进行加1运算,并将调用者的调用者信息存入所述调用者列表的步骤包括:若所述单例组件的获取方法被调用,则判断所述单例组件的获取方法的调用者的调用者信息是否存在于所述调用者列表中;若所述调用者的调用者信息存在于所述调用者列表中,则计数器不加1;若所述调用者的调用者信息不存在于所述调用者列表中,则计数器加1,并将所述调用者的调用者信息存入所述调用者列表中。在一些实施方式中,所述根据所述单例组件的资源释放方法被不同调用者所调用的次数对所述计数器进行减1运算,并将调用者的调用者信息从所述调用者列表中删除的步骤包括:若所述单例组件的资源释放方法被调用,则判断调用所述单例组件的资源释放方法的调用者的调用者信息是否存在于所述调用者列表中;若所述调用者的调用者信息存在于所述调用者列表中,则将所述计数器的计数减1,并将所述调用者的调用者信息从所述调用者列表中删除;若所述调用者的调用者信息不存在于所述调用者列表中,则所述计数器的计数不变。在一些实施方式中,所述的方法还包括:若所述单例组件所依赖的程序被关闭,或者,所述单例组件及其调用者所依赖的其他组件被销毁,则清零所述计数器并清空所述调用者列表;通过预留的强制销毁的入口,强制释放所述单例组件的资源并销毁所述单例组件。在一些实施方式中,所述调用者信息的获取方法包括:获取包含所述单例组件的调用记录的调用栈;从所述调用栈中找到调用者的调用者信息。本专利技术的另一方面还提供了一种单例组件资源释放装置,包括:计数器和列表创建模块,用于为单例组件创建计数器和调用者列表;计数器和列表修改模块,用于根据所述单例组件的获取方法被不同调用者所调用的次数对所述计数器进行加1运算,并将调用者的调用者信息存入所述调用者列表;以及,根据所述单例组件的资源释放方法被不同调用者所调用的次数对所述计数器进行减1运算,并将调用者的调用者信息从所述调用者列表中删除;资源释放模块,当所述计数器的计数为0时,用于进行针对所述单例组件的资源释放。在一些实施方式中,所述计数器和列表修改模块,具体用于:若所述单例组件的获取方法被调用,则判断所述单例组件的获取方法的调用者的调用者信息是否存在于所述调用者列表中;若所述调用者的调用者信息存在于所述调用者列表中,则计数器不加1;若所述调用者的调用者信息不存在于所述调用者列表中,则计数器加1,并将所述调用者的调用者信息存入所述调用者列表中。在一些实施方式中,所述计数器和列表修改模块,具体用于:若所述单例组件的资源释放方法被调用,则判断调用所述单例组件的资源释放方法的调用者的调用者信息是否存在于所述调用者列表中;若所述调用者的调用者信息存在于所述调用者列表中,则将所述计数器的计数减1,并将所述调用者的调用者信息从所述调用者列表中删除;若所述调用者的调用者信息不存在于所述调用者列表中,则所述计数器的计数不变。在一些实施方式中,所述的装置还包括资源强制强制释放模块,具体用于:若所述单例组件所依赖的程序被关闭,或者,所述单例组件及其调用者所依赖的其他组件被销毁,则清零所述计数器并清空所述调用者列表;通过预留的强制销毁的入口,强制释放所述单例组件的资源并销毁所述单例组件。在一些实施方式中,所述计数器和列表修改模块,还用于获取调用者信息,具体包括:获取包含所述单例组件的调用记录的调用栈;从所述调用栈中找到调用者的调用者信息。从上面所述可以看出,本专利技术提供的所述单例组件资源释放方法及装置,通过引入计数器和调用者列表,在不同调用者调用单例组件获取方法时,所述计数器都加1,在不同调用者调用单例组件资源释放方法时,所述计数器都减1,并且在计数器的计数再次为0时,再进行针对所述单例组件的资源释放,从而解决了单例组件在多个调用者存在的情况下释放资源会引起相互冲突的问题。所述单例组件资源释放方法及装置,相对于传统的单例模式,能处理需要释放资源的单例组件,保有传统单例模式的避免重复创建、省时间省内存的优点;此外,还允许调用者在不顾及其它调用者是否释放了资源的情况下,进行资源释放,因为真正的释放资源的动作被封装在引用计数器判断的单例组件内部,无需外部去查询或者计数。所述单例组件资源释放方法及装置,代码量少而且简单,同时将单例模式和引用计数相结合,避免了单例组件释放资源导致的冲突。附图说明图1为本专利技术提供的单例组件资源释放方法的一个实施例的流程示意图;图2为本专利技术提供的单例组件资源释放方法的另一个实施例的流程示意图;图3为本专利技术提供的单例组件资源释放装置实施例的模块结构示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本专利技术进一步本文档来自技高网
...

【技术保护点】
一种单例组件资源释放方法,其特征在于,包括:为单例组件创建计数器和调用者列表;根据所述单例组件的获取方法被不同调用者所调用的次数对所述计数器进行加1运算,并将调用者的调用者信息存入所述调用者列表;根据所述单例组件的资源释放方法被不同调用者所调用的次数对所述计数器进行减1运算,并将调用者的调用者信息从所述调用者列表中删除;当所述计数器的计数为0时,进行针对所述单例组件的资源释放。

【技术特征摘要】
1.一种单例组件资源释放方法,其特征在于,包括:为单例组件创建计数器和调用者列表;根据所述单例组件的获取方法被不同调用者所调用的次数对所述计数器进行加1运算,并将调用者的调用者信息存入所述调用者列表;根据所述单例组件的资源释放方法被不同调用者所调用的次数对所述计数器进行减1运算,并将调用者的调用者信息从所述调用者列表中删除;当所述计数器的计数为0时,进行针对所述单例组件的资源释放。2.根据权利要求1所述的方法,其特征在于,所述根据所述单例组件的获取方法被不同调用者所调用的次数对所述计数器进行加1运算,并将调用者的调用者信息存入所述调用者列表的步骤包括:若所述单例组件的获取方法被调用,则判断所述单例组件的获取方法的调用者的调用者信息是否存在于所述调用者列表中;若所述调用者的调用者信息存在于所述调用者列表中,则计数器不加1;若所述调用者的调用者信息不存在于所述调用者列表中,则计数器加1,并将所述调用者的调用者信息存入所述调用者列表中。3.根据权利要求1所述的方法,其特征在于,所述根据所述单例组件的资源释放方法被不同调用者所调用的次数对所述计数器进行减1运算,并将调用者的调用者信息从所述调用者列表中删除的步骤包括:若所述单例组件的资源释放方法被调用,则判断调用所述单例组件的资源释放方法的调用者的调用者信息是否存在于所述调用者列表中;若所述调用者的调用者信息存在于所述调用者列表中,则将所述计数器的计数减1,并将所述调用者的调用者信息从所述调用者列表中删除;若所述调用者的调用者信息不存在于所述调用者列表中,则所述计数器的计数不变。4.根据权利要求1所述的方法,其特征在于,还包括:若所述单例组件所依赖的程序被关闭,或者,所述单例组件及其调用者所依赖的其他组件被销毁,则清零所述计数器并清空所述调用者列表;通过预留的强制销毁的入口,强制释放所述单例组件的资源并销毁所述单例组件。5.根据权利要求1-4任意一项所述的方法,其特征在于,所述调用者信息的获取方法包括:获取包含所述单例组件的调用记录的调用栈;从所述...

【专利技术属性】
技术研发人员:郦龙
申请(专利权)人:乐视控股北京有限公司乐视网信息技术北京股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1