当前位置: 首页 > news >正文

网站租用怎么办网站平台

网站租用,怎么办网站平台,辽源市住房和城乡建设局网站,营销咨询公司排名前十glide性能优化实战 前言 项目使用glide加载图片之前也只是会基本api,这次项目有非常多的图片需要展示#xff0c;而且设备是一个android12的版本#xff0c;但是性能不太理想#xff0c;分给APP的资源不太多#xff0c;所以需要优化现有图片加载逻辑#xff0c;读者可以…glide性能优化实战 前言 项目使用glide加载图片之前也只是会基本api,这次项目有非常多的图片需要展示而且设备是一个android12的版本但是性能不太理想分给APP的资源不太多所以需要优化现有图片加载逻辑读者可以根据自己的项目自行选择优化项。 关于Glide的简单介绍 Glide是一个快速高效的Android图片加载库注重于平滑的滚动。Glide提供了易用的API高性能、可扩展的图片解码管道decode pipeline以及自动的资源池技术。 Glide 支持拉取解码和展示视频快照图片和GIF动画。Glide的Api是如此的灵活开发者甚至可以插入和替换成自己喜爱的任何网络栈。默认情况下Glide使用的是一个定制化的基于HttpUrlConnection的栈但同时也提供了与Google Volley和Square OkHttp快速集成的工具库。 虽然Glide 的主要目标是让任何形式的图片列表的滚动尽可能地变得更快、更平滑但实际上Glide几乎能满足你对远程图片的拉取/缩放/显示的一切需求。 API Glide 使用简明的流式语法API这是一个非常棒的设计因为它允许你在大部分情况下一行代码搞定需求 Glide.with(context).load(url).into(imageView);性能 Glide 充分考虑了Android图片加载性能的两个关键方面 图片解码速度解码图片带来的资源压力 为了让用户拥有良好的App使用体验图片不仅要快速加载而且还不能因为过多的主线程I/O或频繁的垃圾回收导致页面的闪烁和抖动现象。 Glide使用了多个步骤来确保在Android上加载图片尽可能的快速和平滑 自动、智能地下采样(downsampling)和缓存(caching)以最小化存储开销和解码次数积极的资源重用例如字节数组和Bitmap以最小化昂贵的垃圾回收和堆碎片影响深度的生命周期集成以确保仅优先处理活跃的Fragment和Activity的请求并有利于应用在必要时释放资源以避免在后台时被杀掉。 关于Glide的初步优化 上面都是官网的介绍下面我们进行初步的一个优化。 缓存策略 首先是图片的缓存策略。几个可配置的缓存策略属性在DiskCacheStrategy类中都有介绍 NONE 不使用缓存每次都重新加载 DATA 在解码之前将检索到的数据直接写入磁盘缓存。 RESOURCE 在解码后再将检索到的数据写入磁盘缓存。 AUTOMATIC 尝试根据DataFetcher和EncodeStrategy中的ResourceEncoder如果ResourceEncoder可用的话的数据源智能地选择策略。 ALL 如果是远程数据使用DATA和RESOURCE缓存如果是本地数据使用RESOURCE缓冲。 项目加载的都是本地图片所以在加载速度和缓存大小的权衡下使用了RESOURCE ... .diskCacheStrategy(DiskCacheStrategy.RESOURCE) ...图片裁剪 因为缓存大小跟图片大小是有直接关系的所以加载前最好将其裁剪为和控件大小一致避免过大的图片造成ANR和Out Of Memory ... .override(your size) ...移除加载动画 Glide为了保证图片加载的过度流畅性不显得突兀是有默认的动画和变换的但这也会消耗一定的性能所以我们将它关闭 ... .dontAnimate() .dontTransform() ...其他 可选如果需要在加载过程中对图片进行处理可以使用RequestListener 初步结果 都加上过后大概是这个样子 Glide.with(context).load(url).override(your size).dontAnimate().dontTransform().diskCacheStrategy(DiskCacheStrategy.RESOURCE).into(imageView);可以从Profiler中看到加载一个list的图片时内存和CPU都有下降。 关于Glide的AppGlideModule定制 在新版Glide中可以通过自定义AppGlideModule来全局定义glide的设置 import android.content.Context import com.bumptech.glide.Glide import com.bumptech.glide.GlideBuilder import com.bumptech.glide.Registry import com.bumptech.glide.annotation.GlideModule import com.bumptech.glide.load.DecodeFormat import com.bumptech.glide.load.engine.bitmap_recycle.LruArrayPool import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool import com.bumptech.glide.load.engine.cache.DiskLruCacheWrapper import com.bumptech.glide.load.engine.cache.LruResourceCache import com.bumptech.glide.load.engine.cache.MemorySizeCalculator import com.bumptech.glide.load.engine.executor.GlideExecutor import com.bumptech.glide.module.AppGlideModule import com.bumptech.glide.request.RequestOptions import com.fawvw.hmi.media.common.utils.LogUtil import java.io.FileGlideModule class MyAppGlideModule : AppGlideModule() {private val TAG MyAppGlideModule//图片文件缓存 10Mprivate var IMAGE_CACHE_COUNT 10 * 1024 * 1024private val SOURCE_EXECUTOR_NAME sourceprivate val ANIMATION_EXECUTOR_NAME animationoverride fun applyOptions(context: Context, builder: GlideBuilder) {super.applyOptions(context, builder)val calculator MemorySizeCalculator.Builder(context).build()val defaultMemoryCacheSize calculator.memoryCacheSizeval defaultBitmapPoolSize calculator.bitmapPoolSizeval defaultArrayPoolSize calculator.arrayPoolSizeInBytesLogUtil.d(TAG,defaultMemoryCacheSize: $defaultMemoryCacheSize, defaultBitmapPoolSize: $defaultBitmapPoolSize, defaultArrayPoolSize: $defaultArrayPoolSize)builder.setDefaultRequestOptions(RequestOptions().format(DecodeFormat.PREFER_RGB_565))val cacheLocation File(context.externalCacheDir, GlideCache)if (!cacheLocation.exists()) {cacheLocation.mkdirs()}//设置glide文件缓存为10Mbuilder.setDiskCache {DiskLruCacheWrapper.create(cacheLocation, IMAGE_CACHE_COUNT.toLong())}//设置glide内存,bitmap池,数组池砍builder.setMemoryCache(LruResourceCache((defaultMemoryCacheSize / 4).toLong()))builder.setBitmapPool(LruBitmapPool((defaultBitmapPoolSize / 4).toLong()))builder.setArrayPool(LruArrayPool(defaultArrayPoolSize / 4))//设置Source线程最大数量为1builder.setSourceExecutor(GlideExecutor.newSourceBuilder().setThreadCount(1).setName(SOURCE_EXECUTOR_NAME).build())//设置Animation线程最大数量为1builder.setAnimationExecutor(GlideExecutor.newAnimationBuilder().setThreadCount(1).setName(ANIMATION_EXECUTOR_NAME).build())}override fun registerComponents(context: Context, glide: Glide, registry: Registry) {super.registerComponents(context, glide, registry)} }编译过后就可以调用GlideApp了用于将Glide替换掉注意别忘了添加GlideModule注解。 总结 在进行了上面的两个定制过后CPU和内存都有明显的下降但是有些配置确实会导致加载速度变慢和用户体验变差需要自己权衡。
http://www.dnsts.com.cn/news/57267.html

相关文章:

  • 长沙购物网站建设WordPress做搜索引擎
  • 南京自助建站模板地铁工程建设论文投稿网站
  • 获取网站访客信息卖东西专业网站网上
  • 网站维护的方法安卓网站开发视频
  • 邢台网站建设最新报价线上推广渠道和方式
  • 大良网站设计价位昆明seo
  • 网站开发过程中出现的问题手机网站菜单设计模板
  • 绿色大气漂亮dedecms茶叶企业网站html5 wap网站
  • 东莞微信网站建设信息有什么公司建网站
  • 网站后台界面 园林设计常德公司做网站
  • 青州网站是做网站设计好还是杂志美编好
  • 定制建站方案免费网站服务器推荐
  • dedecms电影网站源码本地环境如何安装wordpress
  • 网站前台如何做访问量显示网络公司推广方案
  • c 可以做网站吗网站页面设计工作流程
  • 网站建设费应入什么科目直播网站源码免费
  • 网站验证钱的分录怎么做南昌市有帮做网站的吗
  • 网站建设安全性wordpress设置超链接
  • 在网页做动态图片的网站建筑信息平台app
  • 如何分析对手网站关键词图片上传分享平台
  • 网站建设的基础资料东道设计应届生收入
  • 网站制作_做网站_耐思智慧公司做的网站打开慢
  • 网站的功能建设方案神农架网站建设
  • 保定建设信息网站整合营销传播的概念
  • 英文网站制作 官网网站打开空白页面
  • 浙江建设厅网站如何做好外贸网络营销
  • 贵阳拍卖网站开发公司怎么免费建立个人网站
  • 装修网站模板12免费建站网站
  • 网站开发代理江苏wordpress自建主题
  • 济宁专业网站建设wordpress 演示数据