CN116166422A - 内存优化方法、装置、电子设备及存储介质 - Google Patents
内存优化方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116166422A CN116166422A CN202211660975.8A CN202211660975A CN116166422A CN 116166422 A CN116166422 A CN 116166422A CN 202211660975 A CN202211660975 A CN 202211660975A CN 116166422 A CN116166422 A CN 116166422A
- Authority
- CN
- China
- Prior art keywords
- page
- memory
- media object
- media
- stack
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种内存优化方法、装置、电子设备及存储介质,方法包括响应于第一页面的打开请求,将第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个媒体对象的加载参数,加载参数包括媒体对象的本地文件缓存地址;响应于对第一页面的跳转操作,在显示界面展示与跳转操作相对应的第二页面,并释放第一页面中的多个媒体对象所占用的内存;响应于满足由第二页面返回第一页面的预设返回规则,从页面栈中获取第一页面,基于加载参数从本地文件缓存地址所指向的本地文件缓存中重新将多个媒体对象加载至内存中,并在显示界面重新展示第一页面,本申请能在不影响用户体验的同时防止内存溢出崩溃。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种内存优化方法、装置、电子设备及存储介质。
背景技术
图片是大部分移动应用的主要页面展示元素,尤其是内容型应用的信息流或者详情页都会包含大量图片,而图片又是内存主要分配来源。
对于内容型应用,用户可以通过内容详情页下的内容推荐和用户推荐模块不断点开新的内容详情页或用户详情页,这会使得页面图片占用的内存越来越大,而移动设备应用最大内存有限,较易触发内存溢出而崩溃。
发明内容
本申请实施例提供一种内存优化方法、装置、电子设备及存储介质,以节省内存空间。
本申请实施例的一方面提供一种内存优化方法,包括:响应于第一页面的打开请求,将所述第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个所述媒体对象的加载参数,所述加载参数包括所述媒体对象的本地文件缓存地址;响应于对所述第一页面的跳转操作,在所述显示界面展示与所述跳转操作相对应的第二页面,并释放所述第一页面中的所述多个媒体对象所占用的内存;响应于满足由所述第二页面返回所述第一页面的预设返回规则,从所述页面栈中获取所述第一页面,基于所述加载参数从所述本地文件缓存地址所指向的本地文件缓存中重新将所述多个媒体对象加载至所述内存中,并在所述显示界面重新展示所述第一页面。
在一些实施例中,页面的生命周期包括:创建周期、运行周期、暂停周期以及停止周期;所述响应于第一页面的打开请求,将所述第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个所述媒体对象的加载参数,包括:响应于所述第一页面的打开请求,监测所述第一页面的生命周期;响应于所述第一页面处于所述创建周期,将所述第一页面添加至所述页面栈;响应于所述第一页面处于所述运行周期,在所述显示界面开始展示所述第一页面,并在所述第一页面的多个媒体对象容器中分别加载多个所述媒体对象;保存每个所述媒体对象的所述加载参数。
在一些实施例中,所述加载参数还包括:链接参数、裁剪参数和压缩参数中的至少一个;其中,所述链接参数为初次加载所述媒体对象时的网络链接地址,所述裁剪参数为对所述媒体对象进行裁剪处理的参数,所述压缩参数为对所述媒体对象进行压缩处理的参数。
在一些实施例中,所述响应于对所述第一页面的跳转操作,在所述显示5界面展示与所述跳转操作相对应的第二页面,并释放所述第一页面中的所述
多个媒体对象所占用的内存,包括:所述响应于对所述第一页面的跳转操作,监测与所述跳转操作相对应的所述第二页面的生命周期;响应于所述第二页面处于所述创建周期,将所述第二页面添加至所述页面栈;响应于所述第二
页面处于所述运行周期,在所述显示界面展示所述第二页面,且所述第一页0面进入所述停止周期;响应于所述第一页面处于所述停止周期,释放所述第
一页面中的所述多个媒体对象所占用的内存。
在一些实施例中,所述响应于所述第一页面处于所述停止周期,释放所述第一页面中的所述多个媒体对象所占用的内存,包括:响应于所述第一页
面处于所述停止周期,检测所述页面栈中各个页面的运行状态;响应于所述5页面栈中存在有运行状态为已运行的页面,释放所述第一页面中的所述多个
媒体对象所占用的内存。
在一些实施例中,所述释放所述第一页面中的所述多个媒体对象所占用的内存,包括:从所述第一页面的根节点遍历所述第一页面的子节点;响应
于所述子节点为所述媒体对象容器且所述媒体对象容器加载过所述媒体对0象,释放所述媒体对象容器的内存引用,并将所述媒体对象的引用计数减1;
响应于所述媒体对象的引用计数为0,则释放所述媒体对象所占用的内存。
在一些实施例中,所述响应于满足由所述第二页面返回所述第一页面的预设返回规则,从所述页面栈中获取所述第一页面,包括:响应于获取到用
户对所述第二页面的返回操作,从所述页面栈中获取所述第一页面,其中,5所述返回操作包括对所述返回键的点击操作、返回手势操作和返回语音操作
中的至少一种。
在一些实施例中,所述响应于满足由所述第二页面返回所述第一页面的预设返回规则,从所述页面栈中获取所述第一页面,包括:响应于所述第二
页面进入所述暂停周期,查询所述第二页面的当前状态;响应于所述第二页0面的当前状态为正在结束状态,从所述页面栈中获取所述第一页面。
在一些实施例中,所述从所述页面栈中获取所述第一页面,包括:遍历所述页面栈以查找所述第二页面的上一页面,并将所述上一页面作为所述第一页面。
在一些实施例中,所述在所述显示界面重新展示所述第一页面之前,所5述方法还包括:响应于获取到用户对所述第二页面的返回操作,所述第二页
面进入所述暂停周期;在所述显示界面展示所述第二页面的关闭过渡动画;在所述显示界面展示所述第一页面的展现过渡动画。
在一些实施例中,所述媒体对象依靠媒体对象加载框架加载至所述媒体对象容器;所述媒体对象加载框架连接有依赖库;所述方法还包括:为媒体对象加载框架添加生命周期***,以使所述生命周期***能够监测所述页面的创建周期、运行周期、暂停周期以及停止周期;在所述依赖库中添加所述媒体对象容器和所述加载参数的保存功能,以用于保存每个所述媒体对象的所述加载参数;在所述依赖库中为所述生命周期***的所述暂停周期添加内存释放功能,以用于释放所述第一页面中的所述多个媒体对象所占用的内存;在所述依赖库中添加是否满足所述预设返回规则的判断功能;在所述依赖库中添加在满足所述预设规则时恢复所述媒体对象的功能,以用于从所述页面栈中获取所述第一页面,并基于所述加载参数从所述本地文件缓存地址所指向的本地文件缓存中重新将所述多个媒体对象加载至所述内存中。
在一些实施例中,所述媒体对象加载框架包括Glide框架。
本申请实施例的另一方面提供一种内存优化装置,包括:第一显示单元,用于响应于第一页面的打开请求,将所述第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个所述媒体对象的加载参数,所述加载参数包括所述媒体对象的本地文件缓存地址;释放单元,用于响应于对所述第一页面的跳转操作,在所述显示界面展示与所述跳转操作相对应的第二页面,并释放所述第一页面中的所述多个媒体对象所占用的内存;第二显示单元,用于响应于满足由所述第二页面返回所述第一页面的预设返回规则,从所述页面栈中获取所述第一页面,基于所述加载参数从所述本地文件缓存地址所指向的本地文件缓存中重新将所述多个媒体对象加载至所述内存中,并在所述显示界面重新展示所述第一页面。
本申请实施例的另一方面提供一种电子设备,包括:处理器;以及存储器,用于存储处理器的可执行指令;其中,处理器配置为经由执行可执行指令来执行如上任一实施例所述的方法。
本申请实施例的另一方面提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现如上任一实施例所述的方法。
本申请实施例的另一方面提供一种计算机程序产品,包括计算机程序,其特征在于,计算机程序被处理器执行时实现如上任一实施例所述的方法。
本申请实施例提供的内存优化方法、装置、电子设备及存储介质,方法包括响应于第一页面的打开请求,将第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个媒体对象的加载参数,加载参数包括媒体对象的本地文件缓存地址;响应于对第一页面的跳转操作,在显示界面展示与跳转操作相对应的第二页面,并释放第一页面中的多个媒体对象所占用的内存;响应于满足由第二页面返回第一页面的预设返回规则,从页面栈中获取第一页面,基于加载参数从本地文件缓存地址所指向的本地文件缓存中重新将多个媒体对象加载至内存中,并在显示界面重新展示第一页面。当打开第二页面时,可以释放第一页面的多媒体对象所占用的内存,可以节省内存,使得内存不易溢出崩溃,而在由第二页面返回第一页面时,由于从本地文件缓存中重新加载多媒体对象的速度较快,不会影响用户使用体验。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为应用本申请实施例的内存优化方法的***的结构示意图;
图2为本申请实施例提供的内存优化方法的流程示意图;
图3为本申请实施例提供的判断应用是否切后台的具体方法;
图4为本申请实施例提供的内存优化方法的另一个流程示意图;
图5为本申请实施例提供的页面栈的流程示意图;
图6为本申请实施例提供的内存优化方法的开发流程示意图;
图7为本申请实施例提供的内存优化装置的结构示意图;
图8为本申请实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种内存优化方法、装置、电子设备及存储介质。具体地,本申请实施例的内存优化方法可以由电子设备执行,其中,该电子设备可以为终端或者服务器等设备。该终端可以为智能手机、平板电脑、笔记本电脑、智能语音交互设备、智能家电、穿戴式智能设备、飞行器、智能车载终端等设备,终端还可以包括客户端,该客户端可以是音频客户端、视频客户端、浏览器客户端、即时通信客户端或小程序等。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
首先对本申请实施例的专有名词进行解释:
页面栈:按页面打开顺序维护的所有当前已打开的页面列表。
页面的生命周期:页面运行过程的主要状态,与本申请实施例相关的是创建周期(onCreate)、运行周期(onStart)、暂停周期(onPause)、停止周期(onstop)、销毁周期(onDestroy)。
Activity:Android的页面对象。
Bitmap:图片在内存中的对象表示。
ImageView:图片显示容器。
图片加载框架:下载图片网络服务器链接并显示到ImageView上的***,图片加载框架包含内存缓存、文件缓存等子***。
hook:代码钩子,一种监听代码运行状态或改变代码运行路径的技术。
反射:Java语言的特性,可用于hook。
Glide框架:Google推出的官方图片加载框架。
由于图片加载框架设计的复杂性,Android应用几乎都使用成熟的通用图片加载框架,例如Glide框架,但相关技术中,通用图片加载框架在页面跳转时并不主动释放图片内存,均是在页面销毁时才释放页面的图片内存。当从页面A跳转到页面B时,虽然此时仅页面B屏幕上可见,但页面A的图片内存并不释放,只有先从页面B返回到页面A,页面A再返回,才释放页面A的图片内存,使得从页面B返回到页面A时,页面A的ImageView的图片可以立即展示,如果页面A的图片内存被释放就会导致页面A的图片无法展示。
但是,这种方案仅从不损失用户体验角度出发,但只要页面没有销毁,页面的图片内存就不主动释放。对于内容型应用,用户可以通过内容详情页下的内容推荐和用户推荐模块不断点开新的内容详情页或用户详情页,这会使得页面图片占用的内存越来越大,而移动设备应用最大内存有限,较易触发内存溢出而崩溃。
另外,相关技术中还存在一种自研图片加载框架,该方案在页面停止时释放图片,页面运行时恢复图片。具体做法是,从页面A跳转到页面B后,手动释放页面A的图片内存(此时页面A已停止),从页面B返回到页面A后(此时页面A已运行),再手动恢复页面A的图片,但是由于ImageView的图片已被释放过,页面A运行后恢复图片还有一个等待从网络中将图片重新加载到内存的过程,因此需要为ImageView提供一个默认占位图,用于恢复完成前展示,因此会看到页面图片从占位图转换到原图的加载过程,页面图片会闪一下,用户体验差。
为了解决上述问题中的至少一个,本申请实施例提供一种内存优化方法、装置、电子设备及存储介质,方法包括响应于第一页面的打开请求,将第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个媒体对象的加载参数,加载参数包括媒体对象的本地文件缓存地址;响应于对第一页面的跳转操作,在显示界面展示与跳转操作相对应的第二页面,并释放第一页面中的多个媒体对象所占用的内存;响应于满足由第二页面返回第一页面的预设返回规则,从页面栈中获取第一页面,基于加载参数从本地文件缓存地址所指向的本地文件缓存中重新将多个媒体对象加载至内存中,并在显示界面重新展示第一页面。当打开第二页面时,可以释放第一页面的多媒体对象所占用的内存,可以节省内存,使得内存不易溢出崩溃,而在由第二页面返回第一页面时,由于从本地文件缓存中重新加载多媒体对象的速度较快,不会影响用户使用体验。
以下将结合附图对本申请实施例进行具体说明。
图1为应用本申请实施例的内存优化方法的***的结构示意图。请参照图1,该***包括终端101和服务器102等;终端101和服务器102之间通过网络连接,比如,通过有线或无线网络连接等。
其中,终端101,可以用于显示图形用户界面。其中,该终端用于通过图形用户界面与用户进行交互,例如通过终端下载安装相应的客户端并运行,例如通过调用相应的小程序并运行,例如通过登录网站呈现相应的图像用户界面等。在本申请实施例中,终端101可以安装有内容型应用(例如,图片浏览应用、咨询浏览应用、购物应用等等),并通过内容型应用响应于第一页面的打开请求,将第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个媒体对象的加载参数,加载参数包括媒体对象的本地文件缓存地址;响应于对第一页面的跳转操作,在显示界面展示与跳转操作相对应的第二页面,并释放第一页面中的多个媒体对象所占用的内存;响应于满足由第二页面返回第一页面的预设返回规则,从页面栈中获取第一页面,基于加载参数从本地文件缓存地址所指向的本地文件缓存中重新将多个媒体对象加载至内存中,并在显示界面重新展示第一页面。服务器102可以用于存储多个媒体对象。
需要说明的是,虽然以应用程序为内容型应用为例进行说明,但是本领域技术人员应该理解的是,应用程序可以为其他适当的程序例如音频型应用程序、视频型应用程序等。此外,应用程序可以为安装在台式机上的应用程序、也可以为安装在移动终端的应用程序,还可以为嵌入到应用程序中的小程序等,本申请对此不进行特殊限定。
需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施例在此方面不受任何限制。相反,本申请的实施例可以应用于适用的任何场景。
以下进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优先顺序的限定。
图2为本申请实施例提供内存优化方法的流程示意图。请参照图2,本申请实施例提供一种内存优化方法100,包括以下步骤S110至步骤S130。
步骤S110,响应于第一页面的打开请求,将第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个媒体对象的加载参数,加载参数包括媒体对象的本地文件缓存地址。
步骤S120,响应于对第一页面的跳转操作,在显示界面展示与跳转操作相对应的第二页面,并释放第一页面中的多个媒体对象所占用的内存。
步骤S130,响应于满足由第二页面返回第一页面的预设返回规则,从页面栈中获取第一页面,基于加载参数从本地文件缓存地址所指向的本地文件缓存中重新将多个媒体对象加载至内存中,并在显示界面重新展示第一页面。
其中,第一页面和第二页面可以为某一应用中的页面,第一页面可以为第二页面的上一级页面,第二页面可以为第一页面的子页面。
可以理解,第一页面可以为应用的主页,也可以为主页的子页面,若第一页面为主页,那么第一页面的打开请求,可以是用户对应用的打开操作,该操作可以为触控操作、语音操作或鼠标操作等等。
步骤S110中当获取到第一页面的打开请求,可以将第一页面添加至页面栈,可以理解,该页面栈可以为针对该应用的页面管理堆栈,页面栈中可以存放有应用中已打开的页面。
将第一页面添加至页面栈后,可以在终端的显示界面展示该第一页面,另外第一页面可以展示有多个媒体对象,媒体对象可以为图片、动图、短视频等等,为便于说明,以下以媒体对象为图片为例。
第一页面可以依靠媒体对象加载框架加载媒体对象,媒体对象加载框架可以为自研加载框架或者通用加载框架等等。在一些实施例中,媒体对象加载框架包括Glide框架,Glide框架应用广,通用性好。
可以理解,在第一页面加载媒体对象时,可以调用加载函数,加载函数会传递加载参数,从而将媒体对象加载至第一页面中进行展示。加载参数为用于在第一页面加载媒体对象的相关参数。
在一些实施例中,加载参数还可以包括:链接参数、裁剪参数和压缩参数中的至少一个;其中,链接参数为初次加载媒体对象时的网络链接地址,裁剪参数为对媒体对象进行裁剪处理的参数,压缩参数为对媒体对象进行压缩处理的参数。
可以理解,在首次打开第一页面时,可以依靠链接参数从存储媒体对象的网络服务器中下载媒体对象,链接参数可以指向存储媒体对象的网络链接地址。
另外,依靠链接参数获取的媒体对象可以为原始尺寸或者原始大小,该原始尺寸或者原始大小可能并不符合第一页面展示的需求,此时可以根据裁剪参数将媒体对象进行裁剪处理,即修改原始尺寸,从而使得其尺寸可以满足展示需求。同理,可以根据压缩参数对媒体对象进行压缩处理,从而使得其大小可以满足展示需求。
通过上述加载参数,可以将媒体对象加载至第一页面。
另外,加载参数可以包括媒体对象的本地文件缓存地址,可以理解,媒体对象加载框架具有本地文件缓存,本地文件缓存用于在本地文件夹存储已展示过的内容,所以,当媒体对象初次被加载至第一页面后,其可以在本地文件缓存中存储,本地文件缓存地址指向该媒体对象的本地存储位置。
步骤S110在展示第一页面时,会保存第一页面中展示的每个媒体对象的加载参数。可以理解,第一页面的展示和加载参数的保存可以同时进行,也可以先展示第一页面后保存加载参数,或者,可以先保存加载参数后展示第一页面。
在一些实施例之中,第一页面可以包括按预设规则排列的多个媒体对象,并且,第一页面还可以为滚动列表页面,例如,通过滑动第一页面还可以在第一页面展示新的媒体对象。
在步骤S120中,跳转操作可以是对第一页面中某个媒体对象的点击、双击等等。当获取到跳转操作,可以打开第二页面,第二页面可以为第一页面中某一个媒体对象的详情页面。同时,可以释放第一页面中多个媒体对象的内存。
在步骤S130中,当检测到满足由第二页面返回第一页面的预设返回规则,可以从页面栈中找到第一页面,然后基于加载参数,从本地文件缓存地址指向的本地文件缓存中重新将第一页面的多个媒体对象加载至内存中,进而重新显示第一页面。
其中,预设返回规则可以有多种,例如包括用户对第二页面的返回操作。在一些实施例中,步骤S130中的响应于满足由第二页面返回第一页面的预设返回规则,从页面栈中获取第一页面,可以包括:响应于获取到用户对第二页面的返回操作,从页面栈中获取第一页面,其中,返回操作可以包括对返回键的点击操作、返回手势操作和返回语音操作中的至少一种,从而可以实现从第二页面返回到第一页面。
可以理解,在由第二页面返回第一页面的过程中通常会有过渡动画,该过渡动画通常在几百毫秒,可以利用该时间从本地文件缓存重新加载媒体对象,使得第一页面重新进入显示界面之前就已开始恢复媒体对象,当重新展示第一页面时,媒体对象已恢复加载完成,用户视觉感受流畅,体验好。
本实施例中,在打开第二页面时,可以释放掉第一页面中媒体对象的内存,可以节省内存空间,减少内存崩溃溢出的情况。由于在从第二页面返回第一页面时,从本地文件缓存中直接加载多个媒体对象,相比于重新从网络请求媒体对象,加载时间短,且可以利用过渡动画的时间,实现流畅的视觉感受,用户体验好。
可以理解,通过在应用跳转新页面时自动释放上一个页面的图片,这样无论应用同时打开的个页面有多少个,只有当前展示页面的图片才会分配内存,当应用同时打开的页面比较多,可以显著节省内存,并在页面返回之前自动恢复图片,页面回到屏幕时能立即看到图片,从而达到既节省内存又不损失体验的目的。
在一些实施例中,对于具备页面生命周期监听功能的***,例如安卓***等,还可以利用监听页面的生命周期,来实现上述步骤S110至S130。以下进行详细说明。在一些实施例中,页面的生命周期包括:创建周期(onCreat)、运行周期(onStart)、暂停周期(onPause)以及停止周期(onStop)。当然,页面的生命周期还可以包括销毁周期(onDestroy)。可以理解,每个页面从开始到结束都会依次经历上述生命周期。
步骤S110中的响应于第一页面的打开请求,将第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个媒体对象的加载参数,可以包括以下步骤一至四。
步骤一,响应于第一页面的打开请求,监测第一页面的生命周期。
步骤二,响应于第一页面处于创建周期,将第一页面添加至页面栈。
步骤三,响应于第一页面处于运行周期,在显示界面开始展示第一页面,并在第一页面的多个媒体对象容器中分别加载多个媒体对象。
步骤四,保存每个媒体对象的加载参数。
当获取到第一页面的打开请求,可以开始监听第一页面的生命周期,以安卓***举例,安卓的页面对象为Activity,生命周期的监听可以是利用生命周期***监听Activity生命周期。生命周期***在检测到页面处于上述几个生命周期时,会主动发送提示信息,以提示当前所处生命周期。当检测到第一页面的打开请求时,生命周期***可以开始检测第一页面的生命周期。
当获取到生命周期***返回的第一页面处于创建周期的消息时,可以将第一页面加入页面栈,当获取到生命周期***返回的第一页面处于运行周期的消息时,可以开始展示第一页面,并在第一页面的多个媒体对象容器中加载媒体对象。接着可以保存媒体对象的加载参数。
可以理解,第一页面中可以包括多个媒体对象容器,以媒体对象为图片为例,媒体对象可以为ImageView,每个ImageView可以用于加载图片,从而在第一页面中展示多个图片。
通过生命周期监听,可以在创建周期将第一页面添加至页面栈,实现第一页面的管理。
当然,内存优化方法除了可以应用于安卓***,还可以应用在iOS***和Windows***中。
在一些实施例中,步骤S120中响应于对第一页面的跳转操作,在显示界面展示与跳转操作相对应的第二页面,并释放第一页面中的多个媒体对象所占用的内存,可以包括以下步骤五至八。
步骤五,响应于对第一页面的跳转操作,监测与跳转操作相对应的第二页面的生命周期。
步骤六,响应于第二页面处于创建周期,将第二页面添加至页面栈。
步骤七,响应于第二页面处于运行周期,在显示界面展示第二页面,且第一页面进入停止周期。
步骤八,响应于第一页面处于停止周期,释放第一页面中的多个媒体对象所占用的内存。
当获取到对第一页面的跳转操作,生命周期***可以开始监听第二页面的生命周期,当获取到生命周期***返回的第二页面处于创建周期的消息时,可以将第二页面加入页面栈,当获取到生命周期***返回的第二页面处于运行周期的消息时,可以展示第二页面,此时,第一页面不再显示在显示屏幕,可以进入停止周期。当获取到生命周期***返回的第二页面处于停止周期的消息时,可以释放第一页面中的多个媒体对象的内存,从而可以减少内存占用,防止内存溢出崩溃。
图3为本申请实施例提供的判断应用是否切后台的具体方法,请参照图3,在一些实施例中,步骤八中响应于第一页面处于停止周期,释放第一页面中的多个媒体对象所占用的内存,可以包括:响应于第一页面处于停止周期,检测页面栈中各个页面的运行状态;响应于页面栈中存在有运行状态为已运行的页面,释放第一页面中的多个媒体对象所占用的内存。
可以理解,当第二页面运行时,第一页面会处于停止周期,但是,当在第一页面时,将应用切换至后台运行,第一页面也会处于停止周期,因此当接收到生命周期***返回的第一页面处于停止周期的消息时,需要区分上述两种情况,只有在第一种情况才可释放媒体对象的内存。否则应用切后台也释放内存的话,再切回前台,就会看到媒体对象容器从占位图恢复的过程,体验不佳。
本实施例可以利用页面栈的管理状态来区分,对于应用的页面栈而言,通常,页面栈中最多只存在一个已运行的页面,即当前正在显示的页面,其余为已停止状态。如图3,页面栈中展示有应用中已打开的页面以及其运行状态。当从页面A跳转至页面B,此时页面B创建,页面B加入页面栈,当页面B运行时,将页面栈中的页面B标记为已运行,接着页面A停止,将页面栈中的页面A标记为已停止。此时,用户可以浏览页面B,当用户将应用切至后台时,页面B停止,此时,将页面栈中的页面B标记为已停止。
由此可见,若页面A停止时,若页面栈中仍存在运行中的页面,并不属于切后台的情况;若页面栈中不存在运行中的页面,是应用切后台的情况。
因此,本实施例在第一页面处于停止周期时,可以先检测页面中各个页面的运行状态,若存在有已运行的页面,表明是由第一页面跳转至第二页面的情况,可以释放第一页面的媒体对象的内存,从而可以避免应用切后台的情况的影响。
在一些实施例中,上述实施例中的释放第一页面中的多个媒体对象所占用的内存,可以包括以下步骤。
从第一页面的根节点遍历第一页面的子节点。
响应于子节点为媒体对象容器且媒体对象容器加载过媒体对象,释放媒体对象容器的内存引用,并将媒体对象的引用计数减1。
响应于媒体对象的引用计数为0,则释放媒体对象所占用的内存。
其中,第一页面可以具有页面树状结构,其包括根节点和多个子节点,媒体对象容器可以对应于第一页面的根节点。从内存中将媒体对象加载至媒体对象容器,可以依靠内存引用实现,内存引用可以为媒体对象容器和内存中的媒体对象的对应关系。引用计数为该媒体对象被媒体对象容器引用的次数,若一个媒体对象被一个媒体对象容器引用,引用计数为1,若其被多个媒体对象引用,引用计数为具体的引用数值。
在释放媒体对象的内存时,可以先从第一页面的根节点遍历第一页面的子节点,若子节点为媒体对象容器,且已经加载过媒体对象,此时,可以释放媒体对象容器的内存引用,并且,可以将该媒体对象容器对应的媒体对象的引用计数减一。若内存中的媒体对象的引用计数为0,此时表明该媒体对象未被媒体对象容器引用,可以释放该媒体对象的内存。
通过引用计数可以准确释放第一页面的媒体对象的内存。
在一些实施例中,预设返回规则除了包括用户对第二页面的返回操作外,还可以包括第二页面处于暂停周期且其当前状态为正在结束状态。
具体而言,步骤S130中响应于满足由第二页面返回第一页面的预设返回规则,从页面栈中获取第一页面,可以包括:响应于第二页面进入暂停周期,查询第二页面的当前状态;响应于第二页面的当前状态为正在结束状态,从页面栈中获取第一页面。
可以理解,当获取到返回操作时,第二页面会先进入暂停周期,然后才会进入停止周期,但是,第二页面进入暂停周期并不表示第二页面即将结束,例如,第二页面上出现弹窗时,也会触发第二页面的暂停周期,但其并不表示由第二页面返回第一页面。
本实施例中,在当生命周期***返回第二页面进入暂停周期后,可以先查询第二页面的当前状态,若第二页面处于正在结束状态,此时,表明此时第二页面正在返回第一页面,可以从页面栈中获取第一页面,从而可以通过查询当前状态来准确判断第二页面是否正在结束。
可以理解,一种预设返回规则为用户对第二页面的返回操作,例如用户点击第二页面的返回键时(如果有主动关闭页面的逻辑,也可以通过调用返回键的方法关闭页面),这个时机更靠前,可以更早启动恢复图片任务,但需要项目有图片的Activity继承基类Activity或者实现某个接口,对业务代码有侵入。另一预设规则为用户对第二页面的返回操作后,第二页面处于暂停状态时,该时机比点击第二页面的返回键稍靠后些,但对业务代码无侵入。
在一些实施例中,上述实施例中的从页面栈中获取第一页面,可以包括:遍历页面栈以查找第二页面的上一页面,并将上一页面作为第一页面。
可以理解,页面栈表现为堆栈形式,从过查找第二页面的上一页面,可以准确寻找到第一页面。
在一些实施例中,步骤S130中在显示界面重新展示第一页面之前,方法100还可以包括:响应于获取到用户对第二页面的返回操作,第二页面进入暂停周期;在显示界面展示第二页面的关闭过渡动画;在显示界面展示第一页面的展现过渡动画。
为了便于说明,以下以返回操作为对返回键的点击操作为例阐述。可以理解,由第二页面返回第一页面的过渡动画可以包括第二页面的关闭过渡动画和第一页面的展现过渡动画。
关闭过渡动画可以为第二页面淡出或滑出的动画,展现过渡动画可以为第一页面的淡入或滑入的动画,当按下返回键后,第二页面可以处于暂停周期,然后可以播放关闭过渡动画,接着可以在显示界面展示第一页面的展现过渡动画,然后第一页面处于运行周期,此时第二页面处于停止周期。
通过关闭过渡动画及展现过渡动画,可以在保证用户体验的同时,增加过渡时间,使得应用具有足够的时间从本地文件缓存重新加载媒体对象,使得第一页面重新进入显示界面之前就已开始恢复媒体对象,并在第一页面显示时,媒体对象已经加恢复加载,进一步提升用户体验。
图4为本申请实施例提供的内存优化方法的另一个流程示意图;请参照图4,在一个具体实施例中,第一页面为页面A,第二页面为页面B,媒体对象为图片,***为安卓***,显示界面为终端的屏幕。本实施例的方法可以包括以下步骤11至步骤28。
步骤11,页面A创建,对应Activity的onCreate生命周期,此时页面A加入页面栈。
步骤12,页面A运行,对应Activity的onStart生命周期,此时页面A已进入屏幕,但还未开始绘制。
步骤13,每个ImageView调用图片加载函数时,至少会传递加载参数,加载参数包括链接参数和本地文件缓存地址,还可以包括裁剪参数、图片压缩参数等。
步骤14,保存每个ImageView的图片的加载参数,可以调用View的setTag方法保存,如果每个页面是通过一个封装函数去间接调用图片加载函数,那么仅需在封装函数里处理一次即可,不需要每个页面都去实现这个保存方法。
步骤15,当点击页面A某个图片时,可以跳转到页面B,例如点击信息流的某个缩略内容时会跳转到内容详情页。
步骤16,页面B创建,对应Activity的onCreate生命周期,此时页面B加入页面栈。
步骤17,页面B运行,对应Activity的onStart生命周期,此时页面B已进入屏幕,但还未开始绘制。
步骤18,页面A停止,对应Activity的onStop生命周期,此时页面A已离开屏幕,在onStop中要过滤应用切后台的情况,具体可以参考上述实施例。
步骤19,通过页面A的Activity视图根节点开始遍历每个子节点,如果子节点是ImageView且发起过图片加载,则释放ImageView的图片的内存引用,若引用计数为0则释放图片内存,一般情况下释放引用后,引用计数都会变为0,除非有两个不同的ImageView正好引用同一张图片,两个ImageView中展示的图片一样。
步骤20,页面B返回到页面A,例如是获取到用户对返回键的点击操作。
步骤21,一种实现方式是监听页面的返回操作,以点击返回键为例,需要将项目中有图片的Activity继承一个基类Activity或实现某个接口,转发Activity的onBackPressed通知;另一实现方式是是监听页面暂停行为,页面暂停对应Activity的onPause生命周期,此时页面B仍在屏幕上,处于可见状态。可以理解,onPause触发时页面不一定即将结束,例如页面上出现一个弹窗也会触发onPause,因此需要确认页面是否是正在结束状态,可以使用Activity的isFinishing方法来准确判断页面是否正在结束。
步骤22,遍历页面栈,找到页面B节点的上一个节点,即为页面A。
步骤23,读出步骤14保存的页面A中的每个ImageView的图片的加载参数,重新调用图片加载函数来恢复图片,图片加载函数来自于应用所使用的图片加载框架。图片加载框架都会有本地文件缓存,用于保存从网络中下载的图片文件,因此,恢复图片会从本地文件缓存中加载图片到内存,不用请求网络,加载速度较快。
步骤24,页面B按返回键后,先调用页面B的onPause生命周期,然后开始页面B的关闭过渡动画,如页面B从屏幕移出。
步骤25,执行页面A的展现过渡动画,如页面A从屏幕移入。
步骤26,页面A运行,对应Activity的onStart生命周期,此时页面A已进入屏幕,且ImageView中图片已恢复。
步骤27,页面B停止,对应Activity的onStop生命周期。
步骤28,页面B销毁,对应Activity的onDestroy生命周期,onDestroy时将页面B移出页面栈。
本实施例对页面内的ImageView和图片的加载参数进行统一管理,可在页面A离开屏幕时统一释放图片内存,并在页面A的上层页面B返回时统一恢复页面A的图片,由于在页面A进入屏幕之前就已开始恢复图片,可以做到不损失用户体验,同时节省内存占用。
图5为本申请实施例提供的页面栈的流程示意图,请参照图5,在方法100的执行过程中,页面栈的工作流程包括以下步骤31至步骤37。
步骤31应用启动,可以执行步骤32向***注册ActivityLifecycleCallbacks,即启用生命周期***。接着可以执行步骤33创建页面栈。
步骤34当用户打开页面后,***回调ActivityLifecycleCallbacks的onCreate,即页面处于创建周期中,此时可以将页面加入页面栈。
步骤36当用户关闭页面后,***回调ActivityLifecycleCallbacks的onDestory,页面处于销毁周期,此时页面移除页面栈并销毁。
本实施例通过监听Activity生命周期和管理页面栈,结合页面关闭状态,得到页面A离开屏幕的事件和页面A的上层页面B返回的事件,页面B的返回事件即预设返回规则可以指:返回操作,例如点击页面B的返回键,也可以是页面B获取返回操作后处于暂停周期时。当页面上ImageView发起图片加载时,先保存每个ImageView的图片加载请求参数,当页面A离开屏幕后,遍历页面上每个ImageView并释放图片内存对象的引用,在页面A的上层页面B返回时,为页面A每个ImageView发送需要恢复图片加载的通知并传递所保存的加载参数,最后调用图片加载框架完成恢复图片的任务,由于页面A收到恢复图片的通知时,此时屏幕上显示的是页面B,页面A尚未可见,之后页面B离开屏幕和页面A进入屏幕还有一个几百毫秒的过渡动画,可以利用这个过渡时间内完成页面A的图片从本地文件缓存异步加载到内存,使页面A回到屏幕时图片已恢复。
除了上述方法外,本申请实施例还可以提供一种代码优化方法,以适配当前的媒体对象加载框架,使其可以实现上述内存优化方法,以下进行具体说明。
图6为本申请实施例提供的内存优化方法的开发流程示意图,请结合图6,在一些实施例中,媒体对象依靠媒体对象加载框架加载至媒体对象容器;媒体对象加载框架连接有依赖库;方法100还包括:以下步骤S210至S250。
步骤S210,为媒体对象加载框架添加生命周期***,以使生命周期***能够监测页面的创建周期、运行周期、暂停周期以及停止周期。
步骤S220,在依赖库中添加媒体对象容器和加载参数的保存功能,以用于保存每个媒体对象的加载参数。
步骤S230,在依赖库中为生命周期***的暂停周期添加内存释放功能,以用于释放第一页面中的多个媒体对象所占用的内存。
步骤S240,在依赖库中添加是否满足预设返回规则的判断功能。
步骤S250,在依赖库中添加在满足所述预设规则时恢复媒体对象的功能,以用于从页面栈中获取第一页面,并基于加载参数从本地文件缓存地址所指向的本地文件缓存中重新将多个媒体对象加载至内存中。
其中,在步骤S210中可以为媒体对象加载框架添加生命周期***,监听页面的暂停周期和页面的停止周期等各个生命周期。
以媒体对象加载框架为Google的Glide了框架为例,步骤S210可以包括以下子步骤一至六。
子步骤一,利用反射读取RequestManagerRetriever类的pendingRequestManagerFragments与pendingSupportRequestManagerFragments属性,得到RequestManagerFragment与SupportRequestManagerFragment对象,再反射调用它们的getGlideLifecycle方法,得到Activity的生命周期***ActivityFragmentLifecycle对象。
子步骤二,使用ASM字节码工具,覆写RequestManagerFragment与SupportRequestManagerFragment的onPause方法,调用
ActivityFragmentLifecycle的onPause方法。
子步骤三,定义PauseLifecycleListener接口继承LifecycleListener,添加onPause方法。
子步骤四,定义PauseLifecycleListenerImpl对象,实现
PauseLifecycleListener接口,需要覆写onPause、onStop、onDestroy、onRestore方法。
子步骤五,使用ASM字节码工具,为ActivityFragmentLifecycle添加onPause方法,调用PauseLifecycleListenerImpl的onPause方法。
子步骤六,若图片加载所在的Activity或Fragment没有注册过PauseLifecycleListenerImpl对象,则预先调用ActivityFragmentLifecycle的addListener方法注册PauseLifecycleListenerImpl对象,在
PauseLifecycleListenerImpl的onDestroy方法,调用ActivityFragmentLifecycle的removeListener移除PauseLifecycleListenerImpl对象。
步骤S220中,保存页面中每个媒体对象容器和媒体对象的加载参数。具体而言,可以定义一个封装方法调用Glide框架的图片加载函数,每个页面的ImageView调用该封装方法发起图片加载,这样只需在封装方法中处理图片加载参数保存逻辑,那么每个页面都不需额外处理图片加载参数保存工作。具体可以定义一个数据对象Data来保存图片加载参数、图片加载目标(图片加载目标可以是ImageView,或Glide的Target接口,Target接口将图片以Bitmap数据方式提供),在PauseLifecycleListenerImpl中创建一个数组保存所有Data对象。
步骤S230中,可以在页面停止周期的方法中释放媒体对象的内存引用,若引用计数为0则释放媒体对象内存。具体而言,在PauseLifecycleListenerImpl的onStop方法,先过滤应用切后台的情况,具体可以参考上述实施例,再遍历Data数组,释放ImageView或Target对应的图片的内存引用。在列表上下滑动的场景中,移出屏幕的图片调用Glide的clear方法释放图片内存的同时,也会从PauseLifecycleListenerImpl对象的Data数组中移除。
步骤S240中,可以在获取到返回操作,例如对返回键的点击操作或在页面处于暂停周期的方法中判断页面是否处于正在结束状态。具体而言,若使用监听返回键方式,需将项目中有图片的Activity继承一个基类Activity或实现某个接口,转发Activity的onBackPressed通知给PauseLifecycleListenerImpl的onRestore方法;若使用监听页面暂停周期的方式,在
PauseLifecycleListenerImpl的onPause方法,调用Activity的isFinishing方法来判断当前页面处于正在结束状态。
步骤S250,若满足步骤S240的判断条件,则从页面栈中找到上一个页面,读取保存的加载参数,并恢复上一个页面的图片。具体而言,在PauseLifecycleListenerImpl的onRestore方法,或onPause方法里判断正在结束后,遍历页面栈找到当前页面的上一个页面作为目标页面,继续找目标页面Activity包含的所有PauseLifecycleListenerImpl,并遍历Data数组,最后重新对ImageView或Target发起图片加载。
可以理解,对于图片加载而言,对于自研图片加载框架,按照通用方式实现即可,但对于通用图片加载框架,由于通用图片加载框架的内置行为无法做到页面跳转时节省内存,因此本实施例还提供了一种代码适配方法,并以Google官方图片加载框架Glide作为例子,通过对通用图片加载框架hook并注入适配代码,让通用图片加载框架也能获得兼顾节省内存和无损体验的能力。由于图片加载框架的复杂性,目前应用极少自研图片加载框架,而是采用Glide等通用图片加载框架,通用图片加载框架已深入绑定到移动应用架构中,本实施例通过将适配代码整合成可供应用直接引入的模块,即适配代码可以存储在依赖库中,对于接入Glide的应用只需额外引入一个依赖库和gradle插件即可,不侵入原有业务代码,不需额外开发成本。
另外,该方法针对通用媒体对象加载框架适配度高,通过hook和注入适配代码的方式添加为通用的媒体对象加载框架添加相应机制,可以在应用接入通用的媒体对象加载框架的情况下,还能在第一页面离开屏幕时统一释放媒体对象的内存,且当第一页面的上层第二页面返回时统一恢复媒体对象,且不损失用户体验。
综上,当上述实施例用于图片加载时,能够提供了一种无损体验的页面图片自动释放和恢复的通用方法和适配方法,可与通用图片加载框架或自研图片加载框架搭配使用,可为应用的图片加载框架赋能,使图片加载框架获得在页面跳转场景下既节省图片内存又不损失用户体验的能力,而且每个页面展示逻辑上不需要额外处理,节约了开发量。
当然,上述方法以Glide框架为例,在其他实施例中,该代码优化方法还可以用于其他媒体对象加载框架中。
为便于更好的实施本申请实施例的内存优化方法,本申请实施例还提供一种内存优化装置,请参照图,图7为本申请实施例提供的内存优化装置的结构示意图。其中,该内存优化装置300可以包括以下单元。
第一显示单元301,用于响应于第一页面的打开请求,将第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个媒体对象的加载参数,加载参数包括媒体对象的本地文件缓存地址。
释放单元302,用于响应于对第一页面的跳转操作,在显示界面展示与跳转操作相对应的第二页面,并释放第一页面中的多个媒体对象所占用的内存。
第二显示单元303,用于响应于满足由第二页面返回第一页面的预设返回规则,从页面栈中获取第一页面,基于加载参数从本地文件缓存地址所指向的本地文件缓存中重新将多个媒体对象加载至内存中,并在显示界面重新展示第一页面。
在一些实施例中,页面的生命周期包括:创建周期、运行周期、暂停周期以及停止周期;所述第一显示单元301在用于所述响应于第一页面的打开请求,将所述第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个所述媒体对象的加载参数时,还进一步用于:响应于所述第一页面的打开请求,监测所述第一页面的生命周期;响应于所述第一页面处于所述创建周期,将所述第一页面添加至所述页面栈;响应于所述第一页面处于所述运行周期,在所述显示界面开始展示所述第一页面,并在所述第一页面的多个媒体对象容器中分别加载多个所述媒体对象;保存每个所述媒体对象的所述加载参数。
在一些实施例中,所述加载参数还包括:链接参数、裁剪参数和压缩参数中的至少一个;其中,所述链接参数为初次加载所述媒体对象时的网络链接地址,所述裁剪参数为对所述媒体对象进行裁剪处理的参数,所述压缩参数为对所述媒体对象进行压缩处理的参数。
在一些实施例中,所述释放单元302在用于所述响应于对所述第一页面的跳转操作,在所述显示界面展示与所述跳转操作相对应的第二页面,并释放所述第一页面中的所述多个媒体对象所占用的内存时,还进一步用于:所述响应于对所述第一页面的跳转操作,监测与所述跳转操作相对应的所述第二页面的生命周期;响应于所述第二页面处于所述创建周期,将所述第二页面添加至所述页面栈;响应于所述第二页面处于所述运行周期,在所述显示界面展示所述第二页面,且所述第一页面进入所述停止周期;响应于所述第一页面处于所述停止周期,释放所述第一页面中的所述多个媒体对象所占用的内存。
在一些实施例中,所述释放单元302在用于所述响应于所述第一页面处于所述停止周期,释放所述第一页面中的所述多个媒体对象所占用的内存时,还进一步用于:响应于所述第一页面处于所述停止周期,检测所述页面栈中各个页面的运行状态;响应于所述页面栈中存在有运行状态为已运行的页面,释放所述第一页面中的所述多个媒体对象所占用的内存。
在一些实施例中,所述释放单元302在用于所述释放所述第一页面中的所述多个媒体对象所占用的内存时,还进一步用于:从所述第一页面的根节点遍历所述第一页面的子节点;响应于所述子节点为所述媒体对象容器且所述媒体对象容器加载过所述媒体对象,释放所述媒体对象容器的内存引用,并将所述媒体对象的引用计数减1;响应于所述媒体对象的引用计数为0,则释放所述媒体对象所占用的内存。
在一些实施例中,所述第二显示单元303在用于所述响应于满足由所述第二页面返回所述第一页面的预设返回规则,从所述页面栈中获取所述第一页面时,还进一步用于:响应于获取到用户对所述第二页面的返回操作,从所述页面栈中获取所述第一页面,其中,所述返回操作包括对所述返回键的点击操作、返回手势操作和返回语音操作中的至少一种。
在一些实施例中,所述第二显示单元303在用于所述响应于满足由所述第二页面返回所述第一页面的预设返回规则,从所述页面栈中获取所述第一页面时,还进一步用于:响应于所述第二页面进入所述暂停周期,查询所述第二页面的当前状态;响应于所述第二页面的当前状态为正在结束状态,从所述页面栈中获取所述第一页面。
在一些实施例中,所述第二显示单元303在用于所述从所述页面栈中获取所述第一页面时,还进一步用于:遍历所述页面栈以查找所述第二页面的上一页面,并将所述上一页面作为所述第一页面。
在一些实施例中,所述第二显示单元303在用于所述在所述显示界面重新展示所述第一页面之前,还进一步用于:响应于获取到用户对所述第二页面的返回操作,所述第二页面进入所述暂停周期;在所述显示界面展示所述第二页面的关闭过渡动画;在所述显示界面展示所述第一页面的展现过渡动画。
在一些实施例中,所述媒体对象依靠媒体对象加载框架加载至所述媒体对象容器;所述媒体对象加载框架连接有依赖库;所述装置还包括:添加单元,用于为媒体对象加载框架添加生命周期***,以使所述生命周期***能够监测所述页面的创建周期、运行周期、暂停周期以及停止周期;在所述依赖库中添加所述媒体对象容器和所述加载参数的保存功能,以用于保存每个所述媒体对象的所述加载参数;在所述依赖库中为所述生命周期***的所述暂停周期添加内存释放功能,以用于释放所述第一页面中的所述多个媒体对象所占用的内存;在所述依赖库中添加是否满足所述预设返回规则的判断功能;在所述依赖库中添加在满足所述预设规则时恢复所述媒体对象的功能,以用于从所述页面栈中获取所述第一页面,并基于所述加载参数从所述本地文件缓存地址所指向的本地文件缓存中重新将所述多个媒体对象加载至所述内存中。
在一些实施例中,所述媒体对象加载框架包括Glide框架。
在一些实施例中,本申请实施例还提供了一种电子设备,包括:处理器;以及存储器,存储器用于存储处理器的可执行指令;其中,处理器配置为经由执行可执行指令来执行实现上述任一实施例中的方法。
图8为本申请实施例提供的电子设备的结构示意图,该电子设备400可以是图1所示的终端或服务器。如图8所示,该电子设备400可以包括:通信接口401,存储器402,处理器403和通信总线404。通信接口401,存储器402,处理器403通过通信总线404实现相互间的通信。通信接口401用于电子设备400与外部设备进行数据通信。存储器402可用于存储软件程序以及模块,处理器403通过运行存储在存储器402的软件程序以及模块,例如上述方法实施例中的相应操作的软件程序。
在一些实施例中,该处理器403可以调用存储在存储器402的软件程序以及模块执行上述任一实施例所述的内存优化方法。
本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述任一实施例的方法。为了简洁,在此不再赘述。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现上述任一实施例中的方法。为了简洁,在此不再赘述。
本申请实施例还提供了一种计算机程序,该计算机程序包括计算机指令,计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得电子设备执行本申请实施例中的各方法中的相应流程,为了简洁,在此不再赘述。
应理解,本申请实施例的处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路
(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field
Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶5体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合
执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读0存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该
存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
可以理解,本申请实施例中的存储器可以是易失性存储器或非易失性存
储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以5是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(ProgrammableROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(ElectricallyEPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外
部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静0态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(DynamicRAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(DoubleData Rate SDRAM,DDR
SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总5线随机存取存储器(DirectRambus RAM,DR RAM)。应注意,本文描述的***和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结
合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特0定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方
法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
5在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和
方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种内存优化方法,其特征在于,包括:
响应于第一页面的打开请求,将所述第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个所述媒体对象的加载参数,所述加载参数包括所述媒体对象的本地文件缓存地址;
响应于对所述第一页面的跳转操作,在所述显示界面展示与所述跳转操作相对应的第二页面,并释放所述第一页面中的所述多个媒体对象所占用的内存;
响应于满足由所述第二页面返回所述第一页面的预设返回规则,从所述页面栈中获取所述第一页面,基于所述加载参数从所述本地文件缓存地址所指向的本地文件缓存中重新将所述多个媒体对象加载至所述内存中,并在所述显示界面重新展示所述第一页面。
2.根据权利要求1所述的方法,其特征在于,页面的生命周期包括:创建周期、运行周期、暂停周期以及停止周期;
所述响应于第一页面的打开请求,将所述第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个所述媒体对象的加载参数,包括:
响应于所述第一页面的打开请求,监测所述第一页面的生命周期;
响应于所述第一页面处于所述创建周期,将所述第一页面添加至所述页面栈;
响应于所述第一页面处于所述运行周期,在所述显示界面开始展示所述第一页面,并在所述第一页面的多个媒体对象容器中分别加载多个所述媒体对象;
保存每个所述媒体对象的所述加载参数。
3.根据权利要求2所述的方法,其特征在于,
所述加载参数还包括:链接参数、裁剪参数和压缩参数中的至少一个;其中,所述链接参数为初次加载所述媒体对象时的网络链接地址,所述裁剪参数为对所述媒体对象进行裁剪处理的参数,所述压缩参数为对所述媒体对象进行压缩处理的参数。
4.根据权利要求2所述的方法,其特征在于,所述响应于对所述第一页面的跳转操作,在所述显示界面展示与所述跳转操作相对应的第二页面,并释放所述第一页面中的所述多个媒体对象所占用的内存,包括:
响应于对所述第一页面的跳转操作,监测与所述跳转操作相对应的所述第二页面的生命周期;
响应于所述第二页面处于所述创建周期,将所述第二页面添加至所述页面栈;
响应于所述第二页面处于所述运行周期,在所述显示界面展示所述第二页面,且所述第一页面进入所述停止周期;
响应于所述第一页面处于所述停止周期,释放所述第一页面中的所述多个媒体对象所占用的内存。
5.根据权利要求4所述的方法,其特征在于,
所述响应于所述第一页面处于所述停止周期,释放所述第一页面中的所述多个媒体对象所占用的内存,包括:
响应于所述第一页面处于所述停止周期,检测所述页面栈中各个页面的运行状态;
响应于所述页面栈中存在有运行状态为已运行的页面,释放所述第一页面中的所述多个媒体对象所占用的内存。
6.根据权利要求2所述的方法,其特征在于,所述释放所述第一页面中的所述多个媒体对象所占用的内存,包括:
从所述第一页面的根节点遍历所述第一页面的子节点;
响应于所述子节点为所述媒体对象容器且所述媒体对象容器加载过所述媒体对象,释放所述媒体对象容器的内存引用,并将所述媒体对象的引用计数减1;
响应于所述媒体对象的引用计数为0,则释放所述媒体对象所占用的内存。
7.一种内存优化装置,其特征在于,包括:
第一显示单元,用于响应于第一页面的打开请求,将所述第一页面添加至页面栈,在显示界面展示包括多个媒体对象的第一页面,并保存每个所述媒体对象的加载参数,所述加载参数包括所述媒体对象的本地文件缓存地址;
释放单元,用于响应于对所述第一页面的跳转操作,在所述显示界面展示与所述跳转操作相对应的第二页面,并释放所述第一页面中的所述多个媒体对象所占用的内存;
第二显示单元,用于响应于满足由所述第二页面返回所述第一页面的预设返回规则,从所述页面栈中获取所述第一页面,基于所述加载参数从所述本地文件缓存地址所指向的本地文件缓存中重新将所述多个媒体对象加载至所述内存中,并在所述显示界面重新展示所述第一页面。
8.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-6任一项所述的方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任一项所述的方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211660975.8A CN116166422A (zh) | 2022-12-21 | 2022-12-21 | 内存优化方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211660975.8A CN116166422A (zh) | 2022-12-21 | 2022-12-21 | 内存优化方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116166422A true CN116166422A (zh) | 2023-05-26 |
Family
ID=86410342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211660975.8A Pending CN116166422A (zh) | 2022-12-21 | 2022-12-21 | 内存优化方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116166422A (zh) |
-
2022
- 2022-12-21 CN CN202211660975.8A patent/CN116166422A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11231959B2 (en) | Foreground and background switching entry generation and display following quit operations | |
US10871985B2 (en) | Displaying media files between changes in states of an application client | |
CN107832100B (zh) | 一种apk插件的加载方法及其终端 | |
CN104375872B (zh) | 一种安卓***实现快速开机的方法及装置 | |
US20140208328A1 (en) | Method for terminal acceleration, terminal and storage medium | |
CN107291449B (zh) | 一种页面渲染方法、装置及设备 | |
US20210271491A1 (en) | Application processing method, device, electronic device and storage medium | |
CN113407383B (zh) | 主备***切换方法、装置、服务器及主备*** | |
CN109684573B (zh) | 目标图片显示方法及装置、存储介质、电子设备 | |
CN107045546B (zh) | 一种网页处理方法、装置及智能终端 | |
CN112799925A (zh) | 数据采集方法、装置、电子设备和可读存储介质 | |
CN106569917B (zh) | 一种数据备份方法及移动移动终端 | |
CN115955557A (zh) | 卡顿分析方法及其装置 | |
CN110881224B (zh) | 一种网络长连接方法、装置、设备及存储介质 | |
CN111414207A (zh) | 一种页面搭建方法、装置和设备 | |
WO2024078348A1 (zh) | 应用移植环境下注册表操作的处理方法、装置和介质 | |
CN107436802B (zh) | 用于应用程序的控制方法、***、介质和计算设备 | |
CN111382387B (zh) | 基于小程序的网页访问方法、装置、设备及存储介质 | |
CN116627444A (zh) | 用于自动同步设备上响应与条件的***和方法 | |
CN116954680A (zh) | 存储***的插件更新方法、装置、设备、介质及程序产品 | |
WO2023179183A1 (zh) | 子程序同步处理 | |
CN107168648B (zh) | 文件存储方法、装置及终端 | |
CN116166422A (zh) | 内存优化方法、装置、电子设备及存储介质 | |
US20160171736A1 (en) | Information Processing Method and Electronic Device | |
CN111124627A (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 |