CN111695061A - 一种资源处理方法及装置、设备、存储介质 - Google Patents
一种资源处理方法及装置、设备、存储介质 Download PDFInfo
- Publication number
- CN111695061A CN111695061A CN201910199424.8A CN201910199424A CN111695061A CN 111695061 A CN111695061 A CN 111695061A CN 201910199424 A CN201910199424 A CN 201910199424A CN 111695061 A CN111695061 A CN 111695061A
- Authority
- CN
- China
- Prior art keywords
- resource
- loaded
- loading
- queue
- main thread
- 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
- 238000003672 processing method Methods 0.000 title abstract description 28
- 238000004806 packaging method and process Methods 0.000 claims abstract description 85
- 238000012545 processing Methods 0.000 claims abstract description 25
- 238000012856 packing Methods 0.000 claims abstract description 6
- 238000000034 method Methods 0.000 claims description 49
- 238000004590 computer program Methods 0.000 claims description 11
- 230000006870 function Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 230000001960 triggered effect Effects 0.000 description 9
- 230000011218 segmentation Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请实施例公开了一种资源处理方法,所述方法包括:接收指示加载待加载资源的加载指令;基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,并将所述至少两个包装体添加到队列中;检测到主线程不存在加载所述待加载资源以外的输入源事件时,从所述队列中获取所述包装体;在所述主线程中执行所述包装体,以将所述待加载资源加载至页面。另外,本申请实施例还公开了一种资源处理装置、设备及存储介质。
Description
技术领域
本申请实施例涉及计算机技术领域,涉及但不限于一种资源处理方法及装置、设备、存储介质。
背景技术
目前,随着大屏手机流行,对图片、视频等资源的要求越来越高,资源的数据量越来越大。
为了减小程序的主线程的阻塞,现有技术中,将资源缓存到本地硬盘中,再从本地硬盘中缓存的资源加载到页面中,从而将资源的异步加载。在资源的异步加载过程中,将图片的下载交由后台执行,主线程仅执行缓存的图片至页面的加载。但是如果需要连续加载的多张数据量大的图片或多个视频时,出现页面卡顿、假死不响应等情况的发生。
发明内容
有鉴于此,本申请实施例为解决相关技术中存在的至少一个问题而提供一种资源处理方法及装置、设备、存储介质,解决了页面卡顿、假死不响应的问题。
本申请实施例的技术方案是这样实现的:
第一方面,本申请实施例提供一种资源处理方法,所述方法包括:
接收指示加载待加载资源的加载指令;
基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,并将所述至少两个包装体添加到队列中;
检测到主线程不存在加载所述待加载资源以外的输入源事件时,从所述队列中获取所述包装体;
在所述主线程中执行所述包装体,以将所述待加载资源加载至页面。
第二方面,本申请实施例提供一种资源处理方法,所述方法包括:
接收模块、封装模块、回调模块和加载模块;其中,
所述接收模块,用于接收指示加载待加载资源的加载指令;
所述封装模块,用于基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,并将所述至少两个包装体添加到队列中;
所述回调模块,用于检测到主线程不存在加载所述待加载资源以外的输入源事件时,从所述队列中获取所述包装体;
所述加载模块,用于在所述主线程中执行所述包装体,以将所述待加载资源加载至页面。
第三方面,本申请实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述资源处理方法中的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述资源处理方法中的步骤。
本申请实施例中,提供了一种资源处理方法,将加载待加载资源至页面的加载操作封装为多个包装体,并将多个包装体添加到队列中,如果主线程当前没有加载待加载资源以外的事件需要处理时,从队列中获取包装体,进行资源的加载,从而将资源的加载事件和加载事件以外的输入源事件进行均衡,降低内存峰值,对资源进行平缓的加载,解决了页面卡顿、页面假死等问题,明显提高了系统的运行流畅性,提高了用户体验。
附图说明
图1为本申请实施例网络架构示意图;
图2为本申请实施例提供资源处理方法的实现流程示意图一;
图3为本申请实施例提供的页面示意图一;
图4为本申请实施例提供的RunLoop的结构示意图;
图5为本申请实施例提供的RunLoop的业务逻辑示意图;
图6为相关技术中资源处理流程示意图;
图7为本申请实施例提供的资源处理流程示意图;
图8为本申请实施例提供的资源处理装置的组成结构示意图;
图9为本申请实施例计算机设备的一种硬件实体示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对申请的具体技术方案做进一步详细描述。以下实施例用于说明本申请,但不用来限制本申请的范围。
为了更好地理解本申请,对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)主线程(main Thread),也可称为用户界面(users-interface,UI)线程,当应用程序App启动时自动创建一个线程,该线程称为该应用程序的主线程,在主线程中创建和使用该应用程序的其他线程即子线程。主线程用于对应用程序的事件进行处理。
2)运行循环,用于控制主线程的生命周期的循环机制,控制主线程在没有事件执行时不停止,从而保证应用程序在没有事件时不退出,比如:iphone操作系统(iphoneoperation system,IOS)平台的运行循环RunLoop、安卓Android的循环Looper等。运行循环对应用程序的事件进行检测,当检测到事件时,触发主线程对所检测的事件进行处理,当没有检测到待处理的事件时,触发主线程进入休眠状态,直到检测到新的事件。
3)加载,将本地内存缓存的资源从内存发送至页面的过程。本地内存缓存的资源可提前缓存、也可接收到资源的加载指令后从本地硬盘或网络侧获取进行缓存。
4)资源,可在页面加载的数据,可包括文本、图片、音频、视频等页面数据。
5)包装体,即函数体,加载资源的方法对应的代码块(block),包括加载资源的控制参数。将block添加到主线程中,主线程进行该block对应的资源的加载。
6)、事件,包括输入源事件和定时器事件,输入源事件包括内部事件Sourc0和端口事件Source1,Source0为应用程序内部事件,不能自动触发,只能手动触发,如UI事件、CFSocket。Source1为基于端口(port)的事件,Source1可通过内核和其他线程相互发送消息,而且可以主动唤醒运行循环。定时器事件为基于定时器触发的事件,发生在预定时间或者是重复间隔。
7)、回调,对于一函数,不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应,将这样的函数称为回调函数,将对回调函数的调用过程称为回调。
本申请实施例可提供为资源处理方法及装置、设备和存储介质。实际应用中,资源处理方法可由资源处理装置实现,资源处理装置中的各功能实体可以由计算机设备(如终端设备、服务器)的硬件资源,如处理器等计算资源、通信资源(如用于支持实现光缆、蜂窝等各种方式通信)协同实现。
本申请实施例的资源处理方法可应用于图1所示的资源处理系统,如图1所示,包括:客户端10和服务器20;其中,客户端10中安装有能够访问页面的应用程序,用户可以通过对页面的操作来触发加载指令。加载指令指示加载的待加载资源可位于客户端10的本地内存或本地硬盘中,也可位于服务器20中。客户端10与服务器20通过网络进行交互。
当待加载资源位于客户端10的本地内存或本地硬盘中,客户端接收到加载指令时,也可基于加载指令在本地获取待加载资源,将加载资源的加载操作封装为包装体,放入队列中,并对主线程的运行状态进行监控,当检测到主线程当前不存在其他的输入源事件时,即主线程处于空闲状态时,从队列中获取包装体,并在基于包装体,在将待加载资源加载至页面。
当待加载资源位于服务器20中,客户端接收到加载指令时,将加载指令发送至服务器20,以请求从服务器20下载待加载资源。服务器20接收到客户端20加载指令时,根据加载指令确定对应的待加载资源,并将待加载资源发送至客户端10,客户端10接收服务器20下发的待加载资源,完成待加载资源的下载,将待加载资源缓存在本地,将待加载资源的加载操作封装为包装体,放入队列中,并对主线程的运行状态进行监控,当检测到主线程当前不存在其他的输入源事件时,即主线程处于空闲状态时,从队列中获取包装体,并在基于包装体,在将待加载资源加载至页面。
下面,结合图1所示的资源处理系统的示意图,对本申请实施例提供的资源处理方法、装置、设备和存储介质的各实施例进行说明。
本实施例提供一种资源处理方法,该方法应用于客户端,其中,客户端端可为计算机设备。该方法所实现的功能可以通过计算机设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该计算机设备至少包括处理器和存储介质。
图2为本申请实施例的一种资源处理方法的实现流程示意图,如图2所示,该方法可以包括如下步骤:
S201、接收指示加载待加载资源的加载指令。
客户端上安装有应用程序。当应用程序运行于客户端的前台时,可基于客户端上的按键(如HOME键、锁屏键、音量键等)、传感器(如重力传感器、加速度传感器)、触摸屏幕与用户进行交互,接收用户的操作。
当客户端上的应用程序接收到用户的页面打开操作、页面刷新操作、页面滚动操作等操作时,需要在当前的页面上加载新的资源,基于用户的操作触发加载指令,将需要加载的新的资源称为待加载资源。
S202、基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,并将所述至少两个包装体添加到队列中。
基于触发的加载指令,确定加载指令对应的待加载资源,并基于主线程创建子线程,通过创建的子线程将待加载资源的加载操作封装为包装体。其中,可将待加载资源的加载操作封装为多个包装体,每一个包装体为一个block。在block中,描述有加载待加载资源的加载操作的参数,且包括有指向待加载资源的指针。
在将待加载资源的加载操作封装为包装体时,可将不同类型的待加载资源封装在不同的包装体中。比如:待加载资源包括图片和音频,将加载图片的操作封装为包装体1,将加载音频的操作封装为包装体2。
将封装的包装体添加到队列中。比如:封装的包装体包括包装体1、包装体2,将包装体1和包装体2根据在页面中的前后位置添加在队列中。
在一实施例中,基于触发的加载指令,在确定待加载资源后,还可以:从本地硬盘获取所述待加载资源,并缓存至本地内存中;或从网络侧下载所述待加载资源,并缓存至本地内存中。
在客户端的本地内存中查找待加载资源,当查找到待加载资源时,直接将待加载资源的加载操作封装为包装体。当本地内存中不存在待加载资源时,在本地硬盘中获取待加载资源,当本地硬盘中存储有待加载资源,将本地硬盘中存储的待加载资源缓存至本地内存;当本地硬盘中未存储有待加载资源,从网络侧获取待加载资源。
客户端从网络侧获取待加载资源时,向网络侧发送加载指令,将加载指令发送至网络侧的服务器,服务器接收到加载指令时,将待加载资源返回至客户端,客户端将接收的待加载资源缓存至本地内存中。
需要说明的是,通过运行于后台的子线程从本地硬盘或网络侧获取待加载资源,并将待加载资源缓存至本地内存中。
其中,前台是面向用户的,应用程序在前台运行时,在客户端的显示界面上运行,能够基于应用程序提供的页面与用户进行交互。后台是在资源管理器中运行,用户无法感知。
通过后台子线程获取待加载程序,不增加主线程的内存负担,不影响主线程的运行,不会影响应用程度对用户的操作的响应。
S203、检测到主线程不存在加载所述待加载资源以外的输入源事件时,从所述队列中获取所述包装体。
将所封装成的包装体添加到队列中后,对主线程的运行进行监控,当检测到主线程不存在加载所述待加载资源以外的输入源事件时,获取队列中所添加的包装体。
队列的进出机制为先进先出,比如:队列中包括包装体1和包装体2时,包装体1和包装体2进入队列的先后顺序为包装体1、包装体2,则从队列中获取包装体时,先获取包装体1,再获取包装体2。
从队列中获取包装体时,可周期性地获取,比如:获取周期为0.2秒。当队列中包括包装体1和包装体2时,可先获取包装体1,0.2秒后再获取包装体2。
S204、在所述主线程中执行所述包装体,以将所述待加载资源加载至页面。
在S203中获取包装体后,将包装体添加在主线程,由主线程执行所添加的主线程,执行包装体对应的加载操作,将包装体对应的待加载资源加载至页面。
当周期性地从队列中获取包装体时,相应地,主线程周期性地执行从队列中获取的包装体。
从队列中获取包装体时,接收到输入源事件,可将输入源事件添加到输入源队列中,当队列中的包装体为空时,执行输入源队列中的输入源事件。比如:队列中的包装体包括包装体1、包装体2、包装体3和包装体4,当从队列中获取包装体2时,接收到输入源事件,将接收到的输入源事件添加到输入源队列中,继续获取包装体3和包装体4,当队列中的包装体为空,主线程完成包装体3和包装体4对应的加载资源的加载时,执行输入源队列中的输入源事件。
从队列中获取包装体时,接收到输入源事件,也可暂时停止从队列中获取包装体,由主线程执行接收到的输入源事件,当将接收到的输入源事件执行完成后,继续从队列中获取包装体。比如:队列中的包装体包括包装体1、包装体2、包装体3和包装体4,当从队列中获取包装体2时,接收到输入源事件,在主线程将包装体执行完成后,执行接收到的输入源事件,将接收到的输入源事件执行完成后,继续获取包装体3和包装体4,由主线程完成包装体3和包装体4对应的加载资源的加载。
本申请实施例提供的资源处理方法可应用于以下的场景:
用户对页面连续进行两次刷新操作,且在第一次刷新操作时,存在待加载资源的加载,此时,主线程可先对第二次刷新操作进行响应,并等待主线程对第二次刷新操作的响应结束后,对页面的资源进行加载。
用户在浏览页面时,对页面进行两次连续的页面滑动操作,其中,第一次页面滑动操作将页面滑动至图3所示的区域A,第二次页面滑动作将页面滑动至图2所示的区域B。客户端将区域A待显示的资源作为待加载资源,在对两次连续的滑动操作响应后,将客户端的显示页面滑动至区域B,并在滑动至区域B之后,加载区域A的资源。
在本申请实施例中,将加载待加载资源至页面的加载操作封装为包装体,并将包装体添加到队列中,如果主线程当前没有加载待加载资源以外的事件需要处理时,从队列中获取包装体,进行资源的加载,从而将资源的加载事件和加载事件以外的输入源事件进行均衡,降低内存峰值,对资源进行平缓的加载,解决了页面卡顿、页面假死等问题,明显提高了系统的运行流畅性,提高了用户体验。
在一实施例中,基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,可以包括:基于所述加载指令,确定所述待加载资源的加载信息;当所述加载信息满足设定的均衡加载条件时,将所述待加载资源的加载操作封装成至少两个包装体。
在触发加载指令后,基于加载指令确定待加载资源的资源大小、资源类型等加载信息,并判断加载信息是否满足设定的均衡加载条件。资源类型包括:文本、图片、音频、视频等类型。当加载信息满足设定的均衡加载条件时,将待加载资源的加载操作封装为包装体,等待主线程不存在其他的输入源事件需要处理时,基于包装体加载待加载资源。当加载信息不满足设定的均衡加载条件时,直接加载待加载资源。
均衡加载条件为根据加载信息设定的规则,比如:资源大小大于设定的资源阈值,类型为设定的类型。
比如:设定的均衡加载条件为:资源大小大于设定的第一资源阈值。当待加载资源的资源大小大于第一资源阈值,判断待加载资源满足均衡加载条件。
比如:设定的均衡加载条件为:资源类型为图片或视频。当待加载的资源为图片时,判断待加载资源满足均衡加载条件。
又比如:设定的均衡加载条件为:资源类型为图片或视频且资源大小大于设定的第二资源阈值。当待加载资源为图片,且图片大小大于第二资源阈值,判断待加载资源满足均衡加载条件。
在实际应用中,待加载资源可同时包括多种资源类型的资源,可直接加载不满足均衡加载条件的资源类型的待加载资源,将满足均衡加载条件的资源类型的待加载资源封装为包装体。比如:待加载资源同时包括文本和图片,将文本之间加载,将图片的加载操作封装为包装体。
本申请实施例中,对用于判断是否将待加载资源的加载操作封装为包装体的均衡加载条件不进行任何限定,可根据实际需求进行设置,且上述均衡加载条件的示例性描述中的第一资源阈值和第二资源阈值的的大小可根据实际需求进行设置。
在一实施例中,将待加载资源的加载操作封装成包装体,可以包括:将所述待加载资源切分为至少两个资源块;将所述至少两个资源块的加载操作封装成对应的包装体。
可根据设定的切分策略将待加载资源切分为多个资源块,此时,在进行包装体的封装时,对各资源块进行独立封装,封装成对应的包装体。切分策略可根据资源类型或资源大小进行设定。
比如:切分策略为:资源块的大小小于或等于设定的资源块阈值。此时,将待加载的资源根据资源块阈值的大小切分为多个资源块。例如,待加载资源的资源大小为3.5兆(M),资源块阈值为1,则将待加载资源切分为4个资源块:资源块1、资源块2、资源块3和资源块4。其中,资源块1至资源块3的大小为1M,资源块4的大小为0.5M。
比如:切分策略为:资源类型为图片或视频。此时,将不同资源类型的资源切分至不同的资源块。例如,当待加载的资源为图片和音频时,将图片切分至资源块1,将音频切分至资源块2。
又比如:切分策略为:资源类型和资源块阈值。此时,将不同资源类型的资源切分至不同的资源块,且当根据类型切分后的资源块的大小大于资源块阈值时,继续根据资源块阈值对该资源块进行切分。例如,当待加载的资源为图片和音频时,且图片的大小为0.9M,音频的大小为3.5M,将图片切分至资源块1,将音频且分为资源块2至资源块5。
本申请实施例中,对资源块进行切分的切分策略不进行任何限定,可根据实际需求进行设置,且上述切分策略的示例性描述中的资源块阈值的大小可根据实际需求进行设置。
在一实施例中,在从所述队列中获取所述包装体之后,还可以:将在所述主线程中执行的所述包装体,从所述队列中删除。
当从队列中获取包装体,将包装体添加到主线程,在主线程中执行所添加的包装体时,将添加到主线程由主线程执行的包装体从队列中删除。
比如:队列中的包装体包括:包装体1、包装体2、包装体3和包装体4,当从队列中获取包装体1,将包装体1添加到主线程,由主线程加载包装体1对应的待加载资源时,将包装体1从队列中删除;当从队列中获取包装体2,将包装体2添加到主线程,由主线程加载包装体2对应的待加载资源时,将包装体2从队列中删除;以此类推。
在一实施例中,所述从所述队列中获取所述包装体,可以包括:在所述主线程对应的运行循环中,添加资源加载定时器;基于所述资源加载定时器,回调所述队列中的所述包装体。
在创建主线程时,主线程对应的运行循环自动创建,并通过主线程对应的运行循环对主线程进行监测和控制。当主线程存在需要处理的事件时,主线程对事件进行处理,当主线程不存在需要处理的事件时,控制主线程进行休眠。当主线程处于休眠状态,监测到存在主线程需要处理的事件时,唤醒主线程,主线程进行事件的处理。
这里,在运行循环中添加一新定义的定时器,该定时器为资源加载定时器,运行循环对主线程的运行状态进行监控,当检测到不存在输入源事件,即将处理定时器时,将资源加载定时器添加到运行循环中,并基于加载定时器的定时周期回调队列中的包装体,并将回调的包装体添加到主线程中。
此时,当所述队列为空时,将所述资源加载定时器从所述主线程对应的运行循环中删除。当队列中不包括包装体时,将资源加载定时器从运行循环中删除。
在实际应用中,在将资源加载定时器添加到运行循环之前,可判断队列中是否存在未经主线程处理的包装体,当队列中包括未经主线程处理的包装体时,将资源加载定时器添加到运行循环中。
在本申请实施例中,在运行循环中新定义一个模式,通过新定义的模式中定义一个资源加载定时器,基于资源加载定时器来控制包装体的回调,从而有效的控制主线程对输入源事件和资源加载的均衡。
下面,以计算机设备的系统为IOS系统,运行循环为RunLoop为例对本申请实施例提供的资源处理方法进行进一步说明。
一个线程一次只能执行一个任务,执行完成后线程就会退出。通过Runloop让线程能随时处理事件但并不退出。RunLoop实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行循环的逻辑。线程执行了这个函数后,就会一直处于这个函数内部的“接受消息->等待->处理”的循环中,直到这个循环结束,函数返回。Runloop的结构可如图4所示,Runloop中可以包含多个模式(Mode),每个Mode又可以包含多个输入源(Source)、定时器(Timer)、观察者(Observer)。但Runloop每次被调用时,指定当前运行的Mode。
Runloo的逻辑流程可如图5所示:
1、通知观察者即将进入循环,以通知观察者RunLoop已经启动。
2、通知观察者即将要开始Timer。
3、通知观察者任何即将启动的非基于端口的事件源(Source0)。
4、处理Source0。此时,处理准备好的非基于端口的事件源(Source0)。
5、如果有Source1,跳至第9步。
如果基于端口(port)的事件源(Source1)准备好并处于等待状态,进入步骤9。
6、通知观察者线程即将休眠。
7、线程休眠,等待唤醒;
此时,将线程置于休眠状态,直到以下任一事件发生才唤醒线程:某一事件到达基于端口的事件源(Source1)、定时器启动、外部手动唤醒以及RunLoop设置的时间已经超时。
8、通知观察者线程被唤醒。
9、处理唤醒时收到的消息,之后跳回2。
此时,处理未处理的事件。如果用户定义的定时器启动,处理定时器事件并重启RunLoop,进入步骤2。如果输入源启动,传递相应的消息,进入步骤2。如果RunLoop被显示唤醒而且时间还没超时,重启RunLoop,进入步骤2。
10、通知观察者:即将退出循环,即RunLoop结束。
下面,分别对相关技术中的资源处理方法和对本申请实施例的资源处理方法进行描述。
图6为相关技术中的资源处理方法的流程示意图,包括:
当应用程序启动时,基于图5所示的逻辑在即将进入RunLoop,通知观察者进入RunLoop,通知观察者即将要开始Timer,直到进入休眠状态,执行系统回调函数,处理标记的事件。
其中,当应用程序标记的事件为用户基于用户界面视图(UIview)或核心动画层(Core Animation Layer,CALayer)刷新UI所产生的事件时,在系统后台下载n张大图,将用户的UIview或CALayer所产生的刷新UI的事件标记为待处理,当通知观察者即将进入休眠时,系统执行系统回调函数,处理标记的刷新UI的事件,对大图进行一次性加载,此时,会因加载的大图数量较大产生页面卡顿的情况。
在本申请实施例中,如图7所示,当应用程序启动时,基于图5所示的逻辑在即将进入RunLoop,通知观察者进入RunLoop,通知观察者即将要开始Timer,直到进入休眠状态,执行系统回调函数,处理标记的事件。其中,Timer为给主线程对应的RunLoop(main RunLoop)定义新的定时器,完成block的回调。
在页面初始化过程,对主线程添加观察者以及回调函数,监听的模式选择模式commonModes,根据监听的主线程的行为activity选择时间点kCFRunLoopBeforeTimers,当选择时间点kCFRunLoopBeforeTimers时,表征即将对定时器进行处理,在处理Timer前,基于回调函数选择block回调。然后在main RunLoop的commonModes中添加一个重复的Timer计时器,每次间隔很短时间比如:0.2s进行回调。
将加载n张大图的操作封装成n个block中,并在当前控制器中添加一个可变数组属性的数组即队列,将block添加到可变数组中。
在处理Timer时,在监听的回调中,取出数组的中的block。此时,在RunLoop的回调时间处理中,对控制器中的数组进行取值,取出的对象为block,此block为耗时的添加大图操作,在主线程中对block进行执行操作,并将已经执行的block在可变数组中进行删除。
其中,当应用程序标记的事件为用户基于UIview/CALayer刷新UI所产生的事件时,在系统后台下载n张大图,当在主线程中添加block后,系统将用户的UIview/CALayer所产生的刷新UI的事件标记为待处理,当通知观察者即将进入休眠时,系统执行系统回调函数,处理标记的刷新UI的事件执行系统回调函数,处理标记的刷新UI的事件,对block进行加载。
在本申请实施例的资源处理方法中,由于添加了Timer,所以RunLoop会一直运行,另外可以添加判断,在数组为空后从RunLoop中移除Timer,然后在有新的block加入数组后,再将Timer加入到RunLoop中,以此达到优化,避免空闲时间因为Timer唤起RunLoop运行,尽管这个占用内存非常的小。
相关技术中,如果要加载的多张分辨率比较高或者尺寸比较大的图片的时候(例如在tablveView滚动过程中加载多张大图)进行用户交互行为可能会出现无响应事件,因为,此时主线程同时加载过大的内存的图片也是出现卡顿情况。尤其在tableview的滚动过程中,如果两次屏幕刷新之间执行了一个长时间的任务,那么其中会有一帧跳过去,这就造成页面卡顿现象。
通过本申请实施例提供的资源处理方法,通过降低内存峰值,平缓的进行加载,同时通过观察RunLoop的运行状态来进行的优化,不存在同时处理Source和处理UI刷新问题,明显提高了流畅性,提高了用户体验,解决了页面卡顿、假死等现象。
基于前述的实施例,本申请实施例提供一种资源处理装置,该装置包括所包括的各模块、以及各模块所包括的各单元,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)等。
图8为本申请实施例的一种资源处理装置的组成结构示意图,如图8所示,所述装置80包括:接收模块801、封装模块802、回调模块803和加载模块804;其中,
接收模块801,用于接收指示加载待加载资源的加载指令;
封装模块802,用于基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,并将所述至少两个包装体添加到队列中;
回调模块803,用于检测到主线程不存在加载所述待加载资源以外的输入源事件时,从所述队列中获取所述包装体;
加载模块804,用于在所述主线程中执行所述包装体,以将所述待加载资源加载至页面。
在一实施例中,装置80还包括:获取模块,用于:
从本地硬盘获取所述待加载资源,并缓存至本地内存中;或
从网络侧下载所述待加载资源,并缓存至本地内存中。
在一实施例中,封装模块,用于:
基于所述加载指令,确定所述待加载资源的加载信息;
当所述加载信息满足设定的均衡加载条件时,将所述待加载资源的加载操作封装成至少两个包装体。
在一实施例中,封装模块,用于:
将所述待加载资源切分为至少两个资源块;
将所述至少两个资源块的加载操作封装成对应的包装体。
在一实施例中,装置80还包括:第一删除模块,用于将在所述主线程中执行的所述包装体,从所述队列中删除。
在一实施例中,回调模块,用于:
在所述主线程对应的运行循环中,添加资源加载定时器;
基于所述资源加载定时器,回调所述队列中的所述包装体。
在一实施例中,装置80还包括:第二删除模块,用于:
当所述队列为空时,将所述资源加载定时器从所述主线程对应的运行循环中删除。
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的资源处理方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read OnlyMemory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
对应地,本申请实施例提供一种设备,也就是计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例中提供的资源处理方法中的步骤。
对应地,本申请实施例提供一种存储介质,也就是计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中提供的资源处理方法中的步骤。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,图9为本申请实施例计算机设备的一种硬件实体示意图,如图9所示,所述计算机设备900包括:一个处理器901、至少一个通信总线902、用户接口903、至少一个外部通信接口904和存储器905。其中,通信总线902配置为实现这些组件之间的连接通信。其中,用户接口903可以包括显示屏,外部通信接口904可以包括标准的有线接口和无线接口。
存储器905配置为存储由处理器901可执行的指令和应用,还可以缓存待处理器901以及计算机设备中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random AccessMemory,RAM)实现。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的切分,仅仅为一种逻辑功能切分,实际实现时可以有另外的切分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种资源处理方法,其特征在于,所述方法包括:
接收指示加载待加载资源的加载指令;
基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,并将所述至少两个包装体添加到队列中;
检测到主线程不存在加载所述待加载资源以外的输入源事件时,从所述队列中获取所述包装体;
在所述主线程中执行所述包装体,以将所述待加载资源加载至页面。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
从本地硬盘获取所述待加载资源,并缓存至本地内存中;或
从网络侧下载所述待加载资源,并缓存至本地内存中。
3.根据权利要求1所述的方法,其特征在于,所述基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,包括:
基于所述加载指令,确定所述待加载资源的加载信息;
当所述加载信息满足设定的均衡加载条件时,将所述待加载资源的加载操作封装成至少两个包装体。
4.根据权利要求1所述的方法,其特征在于,将待加载资源的加载操作封装成至少两个包装体,包括:
将所述待加载资源切分为至少两个资源块;
将所述至少两个资源块的加载操作封装成对应的包装体。
5.根据权利要求1所述的方法,其特征在于,在从所述队列中获取所述包装体之后,所述方法还包括:
将在所述主线程中执行的所述包装体,从所述队列中删除。
6.根据权利要求1所述的方法,其特征在于,所述从所述队列中获取所述包装体,包括:
在所述主线程对应的运行循环中,添加资源加载定时器;
基于所述资源加载定时器,回调所述队列中的所述包装体。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当所述队列为空时,将所述资源加载定时器从所述主线程对应的运行循环中删除。
8.一种资源处理装置,其特征在于,所述装置包括:接收模块、封装模块、回调模块和加载模块;其中,
所述接收模块,用于接收指示加载待加载资源的加载指令;
所述封装模块,用于基于所述加载指令,将待加载资源的加载操作封装成至少两个包装体,并将所述至少两个包装体添加到队列中;
所述回调模块,用于检测到主线程不存在加载所述待加载资源以外的输入源事件时,从所述队列中获取所述包装体;
所述加载模块,用于在所述主线程中执行所述包装体,以将所述待加载资源加载至页面。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述资源处理方法中的步骤。
10.一种存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时。实现权利要求1至7任一项所述的资源处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199424.8A CN111695061B (zh) | 2019-03-15 | 2019-03-15 | 一种资源处理方法及装置、设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199424.8A CN111695061B (zh) | 2019-03-15 | 2019-03-15 | 一种资源处理方法及装置、设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111695061A true CN111695061A (zh) | 2020-09-22 |
CN111695061B CN111695061B (zh) | 2024-07-16 |
Family
ID=72475394
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910199424.8A Active CN111695061B (zh) | 2019-03-15 | 2019-03-15 | 一种资源处理方法及装置、设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111695061B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113141407A (zh) * | 2021-04-25 | 2021-07-20 | 上海淇玥信息技术有限公司 | 一种页面资源加载方法、装置和电子设备 |
CN114741063A (zh) * | 2022-04-06 | 2022-07-12 | 山东赤子城网络技术有限公司 | 一种基于Lua语言的编程框架实现方法及系统 |
CN115268565A (zh) * | 2022-06-27 | 2022-11-01 | 北京五八信息技术有限公司 | 定时器的控制方法、装置及电子设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102629938A (zh) * | 2012-03-14 | 2012-08-08 | 网宿科技股份有限公司 | 对网络视频加载进行视频加速的方法和系统 |
CN103763635A (zh) * | 2013-05-02 | 2014-04-30 | 乐视网信息技术(北京)股份有限公司 | 一种视频缓冲的控制方法和系统 |
CN104881409A (zh) * | 2014-02-27 | 2015-09-02 | 北京方捷软件有限公司 | 一种文档加载的方法及装置 |
KR101640231B1 (ko) * | 2015-02-12 | 2016-07-18 | 소프트온넷(주) | 자동 분산병렬 처리 하둡 시스템의 지원을 위한 클라우드 구동 방법 |
CN106507140A (zh) * | 2016-12-03 | 2017-03-15 | 乐视控股(北京)有限公司 | 一种视频加载方法、装置及电子设备 |
CN108846113A (zh) * | 2018-06-25 | 2018-11-20 | 郑州云海信息技术有限公司 | 一种图片预加载的方法、系统及相关组件 |
CN109361947A (zh) * | 2018-09-14 | 2019-02-19 | 深圳Tcl数字技术有限公司 | 网络资源批量加载方法、智能电视、存储介质及装置 |
-
2019
- 2019-03-15 CN CN201910199424.8A patent/CN111695061B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102629938A (zh) * | 2012-03-14 | 2012-08-08 | 网宿科技股份有限公司 | 对网络视频加载进行视频加速的方法和系统 |
CN103763635A (zh) * | 2013-05-02 | 2014-04-30 | 乐视网信息技术(北京)股份有限公司 | 一种视频缓冲的控制方法和系统 |
CN104881409A (zh) * | 2014-02-27 | 2015-09-02 | 北京方捷软件有限公司 | 一种文档加载的方法及装置 |
KR101640231B1 (ko) * | 2015-02-12 | 2016-07-18 | 소프트온넷(주) | 자동 분산병렬 처리 하둡 시스템의 지원을 위한 클라우드 구동 방법 |
CN106507140A (zh) * | 2016-12-03 | 2017-03-15 | 乐视控股(北京)有限公司 | 一种视频加载方法、装置及电子设备 |
CN108846113A (zh) * | 2018-06-25 | 2018-11-20 | 郑州云海信息技术有限公司 | 一种图片预加载的方法、系统及相关组件 |
CN109361947A (zh) * | 2018-09-14 | 2019-02-19 | 深圳Tcl数字技术有限公司 | 网络资源批量加载方法、智能电视、存储介质及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113141407A (zh) * | 2021-04-25 | 2021-07-20 | 上海淇玥信息技术有限公司 | 一种页面资源加载方法、装置和电子设备 |
CN114741063A (zh) * | 2022-04-06 | 2022-07-12 | 山东赤子城网络技术有限公司 | 一种基于Lua语言的编程框架实现方法及系统 |
CN114741063B (zh) * | 2022-04-06 | 2023-08-22 | 山东赤子城网络技术有限公司 | 一种基于Lua语言的编程框架实现方法及系统 |
CN115268565A (zh) * | 2022-06-27 | 2022-11-01 | 北京五八信息技术有限公司 | 定时器的控制方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111695061B (zh) | 2024-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3754490B1 (en) | User interface rendering method and apparatus, and terminal | |
KR102313882B1 (ko) | 애플리케이션 시작 방법 및 장치 | |
US10871985B2 (en) | Displaying media files between changes in states of an application client | |
CN116501210B (zh) | 一种显示方法、电子设备及存储介质 | |
CN111695061B (zh) | 一种资源处理方法及装置、设备、存储介质 | |
CN109343902B (zh) | 音频处理组件的运行方法、装置、终端及存储介质 | |
US10706604B2 (en) | Controlling display performance using display system hints | |
CN106658064B (zh) | 虚拟礼物展示方法及装置 | |
CN106970498B (zh) | 显示方法及电子设备 | |
US20200258195A1 (en) | Image Processing Method and Device | |
CN116089096B (zh) | 负载资源调度方法及电子设备 | |
US20180196584A1 (en) | Execution of multiple applications on a device | |
WO2023087875A1 (zh) | 进程调度方法和终端设备 | |
WO2023061358A1 (zh) | 缓存方法、装置和电子设备 | |
CN113703937A (zh) | 动画切换方法及装置、存储介质 | |
WO2024160136A1 (zh) | 任务调度方法、装置和电子设备 | |
CN111258800A (zh) | 一种页面处理方法、装置和电子设备 | |
WO2021037228A1 (zh) | 一种系统应用的管理方法及装置 | |
WO2021042934A1 (zh) | 数据扫描方法、移动终端和非易失性计算机可读存储介质 | |
CN110489318B (zh) | systrace信息的抓取方法、装置、存储介质及终端 | |
CN116302485A (zh) | Cpu调度方法、装置、电子设备及可读存储介质 | |
CN113568748B (zh) | 一种应用进程处理方法、装置、存储介质及电子设备 | |
CN118796326A (zh) | 二维码的增强显示的方法和终端设备 | |
CN116761032B (zh) | 视频播放方法、可读介质和电子设备 | |
CN116991600B (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 |