减少内存占用的方法、装置及移动终端与流程

文档序号:11707466阅读:232来源:国知局
减少内存占用的方法、装置及移动终端与流程

本发明涉及数据处理领域,具体而言,涉及一种减少内存占用的方法、装置及移动终端。



背景技术:

android优化应用内存性能的方式有很多种,如优化应用的图片缓存、图片大小的、内存泄露、内存空间释放及复用等,但针对的都是应用本身内存占用的优化。在通过内存分析工具进行分析后,发现内存中存在大量系统默认主题相关的资源,包括图片和颜色等,这些资源占用的内存比例相当可观。在分析了android系统资源加载相关的源码后,了解到android系统在启动时就会将许多应用共享的资源(主要是系统默认的主题资源)列为预加载资源,并执行预加载操作并将资源保存到resources(android系统里的应用资源对象,缓存及管理系统及应用资源)的全局静态变量中,然而绝大多数的app几乎都不会使用这些系统的预加载资源,造成了内存的浪费。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种减少内存占用的方法、装置及移动终端,以改善上述问题。

第一方面,本发明实施例提供了一种减少内存占用的方法,所述方法包括:获取到内存中的预加载资源;从所述内存中删除所述预加载资源,其中,所述预加载资源为应用程序启动时系统分配给所述应用程序的系统资源。

第二方面,本发明实施例提供了一种减少内存占用的装置,所述装置包括:资源获取模块,用于获取到内存中的预加载资源;删除模块,用于从所述内存中删除所述预加载资源,其中,所述预加载资源为应用程序启动时系统分配给所述应用程序的系统资源。

第三方面,本发明实施例提供了一种移动终端,所述移动终端包括处理器以及存储器,所述存储器耦接到所述处理器,所述存储器存储指令,当所述指令由所述处理器执行时所述移动终端执行以下操作:获取到内存中的预加载资源;从所述内存中删除所述预加载资源,其中,所述预加载资源为应用程序启动时系统分配给所述应用程序的系统资源。

本发明实施例提供一种减少内存占用的方法、装置及移动终端,通过从内存中获取预加载资源,即应用程序在启动时,系统给所述应用程序分配系统资源,再从所述内存中删除该预加载资源,以减少系统内存占用,从而提高系统的内存性能。

本发明的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明实施例了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了一种可应用于本申请实施例中的移动终端的结构框图;

图2为本发明第一实施例提供的一种减少内存占用的方法的流程图;

图3为本发明第二实施例提供的一种减少内存占用的方法的流程图;

图4为本发明第三实施例提供的一种减少内存占用的装置的结构框图;

图5为本发明第四实施例提供的一种减少内存占用的装置的结构框图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

图1示出了一种可应用于本发明实施例中的移动终端100的结构框图。如图1所示,移动终端100包括存储器101、存储控制器102,一个或多个(图中仅示出一个)处理器103、外设接口104、射频模块105、音频模块106、触控屏幕107等。这些组件通过一条或多条通讯总线/信号线108相互通讯。

存储器101可用于存储软件程序以及模块,如本发明实施例中的图片切换方法以及装置对应的程序指令/模块,处理器103通过运行存储在存储器101内的软件程序以及模块,从而执行各种功能应用以及数据处理,如本发明实施例提供的图片切换方法。

存储器101可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。处理器103以及其他可能的组件对存储器101的访问可在存储控制器102的控制下进行。

外设接口104将各种输入/输入装置耦合至处理器103以及存储器101。在一些实施例中,外设接口104,处理器103以及存储控制器102可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。

射频模块105用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯。

音频模块106向用户提供音频接口,其可包括一个或多个麦克风、一个或者多个扬声器以及音频电路。

触控屏幕107在移动终端100与用户之间同时提供一个输出及输入界面。具体地,触控屏幕107向用户显示视频输出,这些视频输出的内容可包括文字、图形、视频及其任意组合。

可以理解,图1所示的结构仅为示意,移动终端100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。

于本发明实施例中,移动终端100中安装有客户端,该客户端可以是浏览器也可以是第三方应用软件,与服务器(server)端相对应,为用户提供服务,例如电子书阅读服务,用于播放本地文档或者电子书。

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

第一实施例

请参照图2,图2为本发明第一实施例提供的一种减少内存占用的方法的流程图,所述方法具体包括如下步骤:

步骤s210:获取到内存中的预加载资源,所述预加载资源为应用程序启动时系统分配给所述应用程序的系统资源。

通常在应用程序启动时,系统会将许多应用程序共享的系统资源分配给所述应用程序,即该系统资源为系统默认的预加载资源,其中,在获取预加载资源的过程中,可以直接从存储有该预加载资源的内存中获取,或者通过找到存储该预加载资源的指定空间内获取等。

步骤s220:从所述内存中删除所述预加载资源。

这些预加载资源占据着很大的存储空间,也就是占用了大量的内存,但是很多应用程序并不会使用这些预加载资源,所以,这就浪费了很大的内存空间,为了减少内存占用,需要从所述内存中删除所述预加载资源,以大大减少内存的占用,其具体的删除方法在本实施例中不做特别限定。需要说明的是,若有的应用程序需要使用该预加载资源时,可以进行重新加载所述预加载资源,这时这预加载资源也会重新保存进系统的内存,在下一次系统启动时,可以对其进行再一次删除。

通过从内存中获取预加载资源,即应用程序在启动时,系统给所述应用程序分配系统资源,再从所述内存中删除该预加载资源,以减少系统内存占用,从而减小了内存的占用,提高了系统的内存性能。

第二实施例

请参照图3,图3为本发明第二实施例提供的一种减少内存占用的方法的流程图,所述方法具体包括:

步骤s310:获取所述内存中的资源集合,所述资源集合用于存储预加载资源。

在获取所述资源集合之前,还需获取应用资源对象,其获取应用资源对象的获取方法为,调用resources开放的api“getsystem()”,并通过该接口返回该应用对象的静态实例变量r,用以访问android系统框架层的资源,其中,resources为android系统里的应用资源对象,缓存及管理系统及应用资源。

通过上述获得应用资源对象后即可获得所述应用资源对象的静态实例变量r。再获取所述静态实例变量r中存储的预加载资源的资源集合,所述资源集合中存储有所述预加载资源。

再获取上述静态实例变量r中存储的资源集合,上述静态实例变量r包括第一静态成员变量a、第二静态成员变量b以及第三静态成员变量c中的至少一个,所述第一静态成员变量a用于存储所述资源集合中的预加载图片资源集合,所述预加载图片资源集合用于存储所述预加载资源中的预加载图片资源;所述第二静态成员变量b用于存储所述资源集合中的预加载颜色资源集合,所述预加载颜色资源集合用于存储所述预加载资源中的预加载颜色资源;所述第三静态成员变量c用于存储所述资源集合中的预加载颜色选择器资源集合,所述预加载颜色选择器资源集合用于存储所述预加载资源中的预加载颜色选择器资源。

利用java的反射机制,反射静态实例变量r并获取第一静态成员变量a,其代码语句可用“spreloadeddrawables”执行,而第一静态成员变量a中缓存的是预加载图片资源集合,该预加载图片资源集合用于存储预加载图片资源。

利用java的反射机制,反射静态实例变量r并获取第二静态成员变量b,其代码语句可用“spreloadedcolordrawables”执行,而第二静态成员变量b中缓存的是预加载颜色资源集合,该预加载颜色资源集合用于存储预加载颜色资源。

利用java的反射机制,反射静态实例变量r并获取第三静态成员变量c,其代码语句可用“spreloadedcolorstatelists”执行,而第三静态成员变量c中缓存的是预加载颜色选择器资源集合,该预加载颜色选择器资源集合用于存储预加载颜色选择器资源。

步骤s320:删除所述资源集合中的预加载资源。

在找到存有所述预加载资源的资源集合后,可直接从该资源集合中删除该预加载资源。通过上述步骤获取了三个资源集合,分别是预加载图片资源集合、预加载颜色资源集合及预加载颜色选择器资源集合,而在删除这些资源集合中的预加载资源时,可以只删除其中一个资源集合中的预加载资源。

例如,只删除预加载图片资源集合中的预加载图片资源,其代码执行过程为调用该第一静态成员变量a的api,使用“clear()”方法,用以删除预加载图片资源集合中的预加载图片资源。

或者只删除预加载颜色资源集合中的预加载颜色资源,其代码执行过程为调用该第二静态成员变量b的api,使用“clear()”方法,用以删除预加载颜色资源集合中的预加载颜色资源,或者只删除预加载颜色选择器资源集合中的预加载颜色选择器资源,其代码执行过程为调用该第三静态成员变量c的api,使用“clear()”方法,用以删除预加载颜色选择器资源集合中的预加载颜色选择器资源。

也可以只删除其中两个资源集合中的预加载资源,例如,只删除预加载颜色资源集合中的预加载颜色资源和预加载颜色选择器资源集合中的预加载颜色选择器资源,或者只删除预加载颜色资源集合中的预加载颜色资源和预加载颜色选择器资源集合中的预加载颜色选择器资源,或者只删除预加载颜色选择器资源集合中的预加载颜色选择器资源和预加载颜色选择器资源集合中的预加载颜色选择器资源;也可以将三个资源集合中预加载资源都删除,例如,删除预加载图片资源集合中的预加载图片资源、预加载颜色资源集合中的预加载颜色资源以及预加载颜色选择器资源集合中的预加载颜色选择器资源。

步骤s330:释放所述资源集合。

在删除掉相应资源集合中的预加载资源时,其第一静态成员变量a、第二静态成员变量b及第三静态成员变量c都已经解除了其与系统资源的强引用关系,但是这些资源集合也依然占据着很大的存储空间,因此,还需要将这些资源集合释放掉,才能真正减少内存的占用,而解除所谓强引用关系是指一个对象如果被其他对象强引用,那个java虚拟机在内存空间不足时,宁愿抛出异常发送崩溃也不会回收这个对象的内存占用,所以,作为一种实施方式,可以调用system.gc(),利用java的虚拟机可以开始进行垃圾回收及时释放这些资源集合了,因此,这才从内存中完全删除这些预加载资源占用的内存了。

在获取应用资源对象后,在应用资源对象中获取静态实例变量,根据所述静态实例变量而获得静态实例变量中存储的资源集合,再删除掉所述资源集合中存储的预加载资源,预加载资源删除后,释放存储有该预加载资源的资源集合,从而减少了系统内存占用,提高了系统的内存性能。

第三实施例

请参照图4,图4为本发明第三实施例提供的一种减少内存占用的装置400的结构框图。该装置用于执行本发明第一实施例中所述的一种减少内存占用的方法,所述装置具体包括:

资源获取模块410,用于获取到内存中的预加载资源。

删除模块420,用于从所述内存中删除所述预加载资源,其中,所述预加载资源为应用程序启动时系统分配给所述应用程序的系统资源。

第四实施例

请参照图5,图5为本发明第四实施例提供的一种减少内存占用的装置500的结构框图。该装置用于执行本发明第二实施例中所述的一种减少内存占用的方法,所述装置具体包括:

资源获取模块510,用于用于获取到内存中的预加载资源,具体用于获取所述内存中的资源集合,所述资源集合用于存储预加载资源。其中,所述资源获取模块510包括获取对象模块511、获取变量模块512及获取集合模块513。

获取对象模块511,用于获取应用资源对象。

获取变量模块512,用于获取所述应用资源对象的静态实例变量。

获取集合模块513,用于获取所述静态实例变量中存储的资源集合。

删除资源模块520,用于删除所述资源集合中的预加载资源。

释放集合模块530,用于释放所述资源集合,该释放集合模块具体用于利用java的虚拟机释放所述资源集合。

另外,所述静态实例变量包括第一静态成员变量、第二静态成员变量以及第三静态成员变量中的至少一个;其中,所述第一静态成员变量用于存储所述资源集合中的预加载图片资源集合,所述预加载图片资源集合用于存储所述预加载资源中的预加载图片资源;所述第二静态成员变量用于存储所述资源集合中的预加载颜色资源集合,所述预加载颜色资源集合用于存储所述预加载资源中的预加载颜色资源;所述第三静态成员变量用于存储预所述资源集合中的加载颜色选择器资源集合,所述预加载颜色选择器资源集合用于存储所述预加载资源中的预加载颜色选择器资源。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法中的对应过程,在此不再过多赘述。

综上所述,本发明实施例提供一种减少内存占用的方法、装置及移动终端,通过从内存中获取预加载资源,即应用程序在启动时,系统给所述应用程序分配系统资源,再从所述内存中删除该预加载资源,以减少系统内存占用,从而提高系统的内存性能。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1