当前位置: 首页 > 科技观察

HarmonyOS三方软件开发指南(14)-Glide组件功能介绍_0

时间:2023-03-15 15:15:24 科技观察

更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com与华为共建官方介绍在实际应用开发中,会大量使用图像处理,例如:网络图像、本地图像、应用资源、二进制流、Uri对象等,虽然官方提供了PixelMap进行图像处理,但在实际应用中远远不能满足各种应用场景,比如如占位图片、Gif图片、加载失败图片、内存浪费、内存溢出、节省流量等。这时候,你就需要一个能够处理这些问题,并且简单易用、性能高的图像处理器。因此,OhosGlide三方组件应运而生。功能介绍OhosGlide是一款非常优秀的图片处理工具,支持多种格式的图片加载。采用磁盘缓存和内存缓存实现预加载,指定缓存大小,节省内存,避免OOM。它易于操作且易于使用。指南接下来,我们就来看看OhosGlide的使用方法、使用场景,以及它的开发指南。我们先来看看开发者如何使用这个三方软件,即har包。需要注意的几点1.新建一个项目,添加组件Har包依赖在application模块中添加HAR,复制glidelibrary.har到entry\libs目录即可(因为build.gradle已经依赖*.har在libs目录下,所以不需要修改)。2.修改配置文件,先在entry下的build.gradle中添加library依赖,然后在content.json中添加需要的权限(因为在开发过程中,需要使用网络和存储权限,所以需要在content.json中添加相应的权限声明)3、在我们需要加载网络图片的地方,实现如下代码,如下:OhosGlideUtils.with(this).load("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png").def(ResourceTable.Media_A).into(image);注意://with(this)当前页面//load(url)要显示的图片url//def(resID)默认显示图片,中间出现异常,显示默认图片//into(image)待展示的组件在实际开发中,我们不仅需要加载网络图片,还需要加载本地图片,具体代码如下:注://load(inputStream)待展示图片的流作为程序员,最关心的不是如何使用三方软件,而是三方软件的灵魂。如果说实现是重中之重,那么作为一个图片处理工具,核心就是我们的缓存,这样不仅页面加载速度快,还可以节省流量,体验好。接下来我们看看OhosGlide的缓存是如何实现的。缓存主要分为两种。第一个:内存缓存,也就是我们常说的MemoryCache,当第一次加载拍照的时候,把图片缓存在内存中,这样当有网络的时候用户再次访问的时候,内存缓存图片先加载,然后从网络上请求最新的图片。减少流量浪费,增加用户体验其次就是我们所说的磁盘缓存:DiskCache。设计磁盘缓存的核心思想是当前设备没有网络。访问该页面时,如果应用有磁盘缓存,则会显示缓存的图片。.并不是说用户看不到任何东西,这样做的目的是增加用户体验。先介绍第一个:MemoryCache,核心代码如下,具体可以参考源码key),pixelMap);}}publicstaticPixelMapgetPixelMap(Stringkey){returnCACHE_LOADER.getPixelMap(CacheUtils.hashKeyForCache(key));}下面介绍第二种:DiskCache,核心代码如下,具体请参考源码://添加缓存byte[]bytes=response.body().bytes();diskLruCacheImpl.addDiskCache(bytes,url);//获取缓存pixelMap=diskLruCacheImpl.getDiskCache(url);if(pixelMap!=null){abilitySlice.getUITaskDispatcher().asyncDispatch(()->{image.setPixelMap(pixelMap);});}缓存架构图如下:代码如下:publicstaticvoidsavePixelMap(Stringkey,PixelMappixelMap){if(!isCache(键)){CACHE_LOADER.addBitmap(CacheUtils.hashKeyForCache(键),pixelMap);}}publicstaticPixelMapgetPixelMap(Stringkey){returnCACHE_LOADER.getPixelMap(CacheUtils.hashKeyForCache(key));}最终模拟器显示一个网络图片渲染如下:实现过程中,我们可以在任何地方调用OhosGlide来显示网络图片,比如ListContainerloadinglist最后附上项目源码:https://github.com/isoftstone-dev/Gilde_HarmonyOS.git更多内容请访问:https://harmonyos.51cto.com与华为官方合作搭建的鸿蒙技术社区