本发明涉及移动端图片渲染显示技术领域,尤其涉及一种基于多线程的移动端图片渲染方法及装置。
背景技术:
移动端应用程序通常需要对网络图片进行渲染,并根据用户交互情况来调整渲染粒度来达到良好的用户体验。当前行业中的一般做法是利用图像处理器(graphicsprocessingunit,gpu)在处理图像算法时性能远强于cpu的优点,将图片渲染工作提交到gpu中进行并实时展示渲染后的图像。现有技术存在以下的几个问题:1、图像渲染算法复杂,若图像处理周期大于屏幕刷新周期将会造成卡顿,影响用户体验;2、不缓存渲染结果,容易造成大量重复工作,浪费计算资源;3、频繁进行图像渲染会导致移动设备耗电量大增,发热量增大。
技术实现要素:
为解决上述的技术问题,本发明提供了一种缓存渲染结果,基于多线程的移动端图片渲染方法及装置。
本发明实现上述技术效果所采用的技术方案是:
一种基于多线程的移动端图片渲染方法,所述方法包括以下步骤:
s1、获取用户交互行为数据,根据用户的该交互行为数据获取将要显示的图片的粒度x;
s2、查找缓存池中是否存在该粒度为x的图片,是,则将该图片显示在移动端的显示屏上;
s3、判断当前缓存池中图片的最大粒度n与该将要显示的图片的粒度x的差值n-x是否大于设定的粒度裕量k,是,则继续判断该将要显示的图片的粒度x与当前缓存池中图片的最小粒度m的差值x-m是否大于设定的粒度裕量k,否,则启动异步线程渲染粒度为(n+1)~(x+k)的图片并在渲染完成后将该序列的图片加入缓存池,并释放粒度小于x-k的图片;
s4、判断该将要显示的图片的粒度x与当前缓存池中图片的最小粒度m的差值x-m是否大于设定的粒度裕量k,是,则返回到步骤s1继续获取用户交互行为数据,否,则启动异步线程渲染粒度为(x-k)~(m-1)的图片并在渲染完成后将该序列的图片加入缓存池,并释放粒度大于x+k的图片。
进一步地,在所述步骤s2中,若缓存池中不存在该粒度为x的图片,则将该将要显示的图片的粒度x与当前缓存池中图片的最大粒度n和最小粒度m进行比较,若x>n,则显示粒度为n的图片,若x<m,则显示粒度为m的图片。
进一步地,在所述步骤s1中,粒度裕量k的值根据移动端设备的实际情况设定,在cpu性能较高时,该粒度裕量k的值进行正相关设置,在cpu性能较低但内存充足时,该粒度裕量k的值相对cpu性能参数进行负相关设置。
进一步地,在所述步骤s3和所述步骤s4中,于业务层中还对缓存池设置有保证线程安全的线程锁。
进一步地,加载线程锁的步骤包括:判断某线程在访问缓存池时该缓存池是否上锁,是,则返回继续执行判断指令,否,则对缓存池上锁并进行缓存池操作,操作完毕后再对缓存池解锁。
进一步地,所述异步线程的数目根据实际渲染需要设置1~3个。
同时,本发明还提供了一种基于多线程的移动端图片渲染装置,所述装置包括:
获取模块,用于获取用户交互行为数据,根据用户的该交互行为数据获取将要显示的图片的粒度x;
查找模块,查找缓存池中是否存在该粒度为x的图片,是,则将该图片显示在移动端的显示屏上;
第一差值比较模块,将当前缓存池中图片的最大粒度n与该将要显示的图片的粒度x进行比较,差值n-x大于设定的粒度裕量k,则继续比较该将要显示的图片的粒度x与当前缓存池中图片的最小粒度m的差值x-m是否大于设定的粒度裕量k,差值n-x不大于设定的粒度裕量k,则启动异步线程渲染粒度为(n+1)~(x+k)的图片并在渲染完成后将该序列的图片加入缓存池,并释放粒度小于x-k的图片;
第二差值比较模块,将该将要显示的图片的粒度x与当前缓存池中图片的最小粒度m进行比较,差值x-m大于设定的粒度裕量k,则返回到继续获取用户交互行为数据,差值x-m不大于设定的粒度裕量k,则启动异步线程渲染粒度为(x-k)~(m-1)的图片并在渲染完成后将该序列的图片加入缓存池,并释放粒度大于x+k的图片;
渲染模块,用于接收渲染指令,对指定粒度的图片进行渲染;
显示模块,用于显示经用户交互行为调取的图片;
缓存池调取模块,用于在渲染完指定序列的图片后将该指定序列的图片加入缓存池以及取出指定序列的图片。
进一步地,该基于多线程的移动端图片渲染装置还包括:
性能参数获取模块,用于获取移动端设备的cpu性能和内存性能参数值;
粒度裕量设置模块,用于设置移动端设备的粒度裕量k。
进一步地,该基于多线程的移动端图片渲染装置还包括:
线程锁检测模块,用于判断某线程在访问缓存池时该缓存池是否上锁;
上锁模块,用于对缓存池上锁;
解锁模块,用于对缓存池解锁。
进一步地,所述移动端的设备的cpu至少为双核。
本发明的有益效果是:本发明实现图片渲染的算法简单,避免了复杂图像渲染算法造成的卡顿,梯次渲染留存,增加了图片渲染输出的效率,降低了移动端设备的发热量和耗电量,提升了图片渲染输出的稳定性。
附图说明
图1为本发明的流程图;
图2为本发明的逻辑处理流程图;
图3为本发明所述渲染装置的模块结构图;
图4为本发明所述线程锁的加\解锁原理图。
图中:100-渲染装置、10-获取模块、20-查找模块、30-第一差值比较模块、40-第二差值比较模块、50-性能参数获取模块、60-粒度裕量设置模块、70-渲染模块、80-缓存池调取模块、90-显示模块、110-缓存池、111-线程锁检测模块、112-上锁模块、113-解锁模块。
具体实施方式
为了对本发明作出更加清楚完整地说明,下面结合附图和本发明的具体实施例对本发明的技术方案作出进一步说明。
如图1和图2所示,本发明提出的一种基于多线程的移动端图片渲染方法,其包括以下步骤:
s1、获取用户交互行为数据,根据用户的该交互行为数据获取将要显示的图片的粒度x。获取用户交互行为数据的方式通过触摸屏感应指尖的点触坐标位置以及触摸滑动方向或者内置于移动端设备上的各类传感器的当前感应信息,诸如重力感应器、陀螺仪、加速度传感器等;
s2、查找缓存池中是否存在该粒度为x的图片,是,则将该图片显示在移动端的显示屏上。查找缓存池中是否已经存在渲染好的粒度为x的图片,是,则说明缓存池中已经提前渲染好了该粒度为x的图片,在用户交互行为要求显示该图片时,缓存池中的该粒度为x的图片即无延时的刷新显示出来;
s3、判断当前缓存池中图片的最大粒度n与该将要显示的图片的粒度x的差值n-x是否大于设定的粒度裕量k,是,则继续判断该将要显示的图片的粒度x与当前缓存池中图片的最小粒度m的差值x-m是否大于设定的粒度裕量k,否,则启动异步线程渲染粒度为(n+1)~(x+k)的图片并在渲染完成后将该序列的图片加入缓存池,并释放粒度小于x-k的图片;
s4、判断该将要显示的图片的粒度x与当前缓存池中图片的最小粒度m的差值x-m是否大于设定的粒度裕量k,是,则返回到步骤s1继续获取用户交互行为数据,否,则启动异步线程渲染粒度为(x-k)~(m-1)的图片并在渲染完成后将该序列的图片加入缓存池,并释放粒度大于x+k的图片。
具体的,作为本发明实施例的优选,在步骤s2中,若缓存池中不存在该粒度为x的图片,则将该将要显示的图片的粒度x与当前缓存池中图片的最大粒度n和最小粒度m进行比较,若x>n,则显示粒度为n的图片,若x<m,则显示粒度为m的图片。即如果缓存池中不存在粒度为x的图片时,就将该粒度为x的图片与缓存池中粒度最大或最小的图片进行粒度值的比较,如果缓存池中图片的最大粒度比该要显示的图片的粒度x还小,那么为了避免渲染造成的显示突兀问题,就将缓存池中该粒度最大为n的图片进行显示。如果缓存池中图片的最小粒度比该要显示的图片的粒度x还大,那么就将该粒度为m最小的图片进行显示。当画面变化较剧烈,当前需要显示的粒度x大于缓存池中所有图片的最大粒度(或x小于最小粒度)时,为了保证页面不会因为渲染而卡顿,通过显示粒度为最大(或最小)的图片可避免渲染卡顿的问题,提高图片渲染和显示的流畅性。
具体的,作为本发明实施例的优选,在步骤s1中,粒度裕量k的值是根据移动端设备的实际情况设定,在cpu性能较高时,该粒度裕量k的值进行正相关设置,在cpu性能较低但内存充足时,该粒度裕量k的值相对cpu性能参数进行负相关设置。
具体的,如图4所示,在本发明优选实施例的第一种实施方式下,在步骤s3和步骤s4中,于业务层中还对缓存池设置有保证线程安全的线程锁。在启动异步线程对粒度为(x-k)~(m-1)的图片进行渲染或对粒度为(x-k)~(m-1)的图片进行渲染时,存在多个线程同时渲染粒度为n的图片的可能性,为避免造成计算资源的浪费和紊乱,在业务层对缓存池加有保证线程安全的线程锁,防止多个线程同时或重复渲染同一粒度的图片。
具体的,在本发明优选实施例的第一种实施方式下,加载线程锁的步骤包括:判断某线程在访问缓存池时该缓存池是否上锁,是,则返回继续执行判断指令,否,则对缓存池上锁并进行缓存池操作,操作完毕后再对缓存池解锁。进行缓存池的操作包括空闲线程对渲染队列中的图片的渲染。为保证渲染的速度和效率,异步线程的数目根据实际渲染需要设置为1~3个。
同时,如图3所示,本发明还提供了一种基于多线程的移动端图片渲染装置,该渲染装置100包括:缓存池110、获取模块10、查找模块20、渲染模块70、缓存池调取模块80和显示模块90。获取模块10用于获取用户交互行为数据,根据用户的该交互行为数据获取将要显示的图片的粒度x。查找模块20用于查找缓存池110中是否存在该粒度为x的图片,如果存在,则将该图片显示在移动端的显示屏上。具体的,查找模块20与获取模块10连接,渲染模块70与查找模块20之间连接有第一差值判断模块30和第二差值判断模块40,第一差值比较模块30将当前缓存池中图片的最大粒度n与该将要显示的图片的粒度x进行比较,差值n-x大于设定的粒度裕量k,则继续比较该将要显示的图片的粒度x与当前缓存池中图片的最小粒度m的差值x-m是否大于设定的粒度裕量k,差值n-x不大于设定的粒度裕量k,则启动异步线程渲染粒度为(n+1)~(x+k)的图片并在渲染完成后将该序列的图片加入缓存池,并释放粒度小于x-k的图片。第二差值比较模块40用于将该将要显示的图片的粒度x与当前缓存池中图片的最小粒度m进行比较,差值x-m大于设定的粒度裕量k,则返回到继续获取用户交互行为数据,差值x-m不大于设定的粒度裕量k,则启动异步线程渲染粒度为(x-k)~(m-1)的图片并在渲染完成后将该序列的图片加入缓存池,并释放粒度大于x+k的图片。渲染模块70用于接收渲染指令,对指定粒度的图片进行渲染。缓存池调取模块80与渲染模块70连接,用于在渲染完指定序列的图片后将该指定序列的图片加入缓存池以及取出指定序列的图片。显示模块90与缓存池110连接,用于显示经用户交互行为调取的图片。为保证处理速度,移动端的设备的cpu至少为双核。为保证渲染的速度和效率,异步线程的数目根据实际渲染需要设置为1~3个。
具体的,在本发明渲染装置100的优选实施例中,该渲染装置100还包括:性能参数获取模块50以及与性能参数获取模块50连接的粒度裕量设置模块60。性能参数获取模块50用于获取移动端设备的cpu性能和内存性能参数值,粒度裕量设置模块60用于设置移动端设备的粒度裕量k,渲染模块70与粒度裕量设置模块60连接。
可选地,该基于多线程的移动端图片渲染装置还包括:
线程锁检测模块111、上锁模块112和解锁模块113,线程锁检测模块111、上锁模块112和解锁模块113。线程锁检测模块111用于判断某线程在访问缓存池时该缓存池是否上锁,上锁模块112用于对缓存池上锁,解锁模块113用于对缓存池解锁。如果检测为上锁状态,则延迟一定时间后再次判断是否已上锁,若未上锁则对缓存池上锁并进行操作,操作完毕后再对缓存池解锁。
本发明实现图片渲染的算法简单,避免了复杂图像渲染算法造成的卡顿,梯次渲染留存,增加了图片渲染输出的效率,降低了移动端设备的发热量和耗电量,提升了图片渲染输出的稳定性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。