搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
盐析白兔
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
反弹shell原理与实现_反弹shell原理及防御方法
2
Bert遇见文本分类
3
网络攻防之网络扫描
4
浅谈CVPR2022的几个研究热点
5
qt 显示 dicom图像_专业显示器(医用)特点
6
selenium指的是什么?包含哪些组件_selenium是什么
7
关于网页实现串口或者TCP通讯的说明_html串口通信
8
数据包处理利器——Scapy基础知识_haslayer
9
XSS跨站脚本安全漏洞防护_存储型跨站脚本攻击漏洞 解决办法
10
linux . 执行java,linux 命令行执行java
当前位置:
article
> 正文
universal-image-loader使用参考_universal-image-loader 域名
作者:盐析白兔 | 2024-02-18 07:03:46
赞
踩
universal-image-loader 域名
摘要: Android开源框架Universal-Image-Loader就像图片加载守护者,为我们提供了丰富的功能特性:(1)多线程加载图像(异步或同步);(2)高度可定制化imageloader配置(线程池、图片下载器、解码器、内存和磁盘缓存、显示图像选项等);(3)每一个显示图像有许多自定义选项(存根图片,缓存开关,解码选项,位图处理和显示等);(4)支持内存和磁盘上的图像缓存(设备的文件系统和SD
Android开源框架Universal-Image-Loader就像图片加载守护者,为我们提供了丰富的功能特性:
(1)多线程加载图像(异步或同步);
(2)高度可定制化imageloader配置(线程池、图片下载器、解码器、内存和磁盘缓存、显示图像选项等);
(3)每一个显示图像有许多自定义选项(存根图片,缓存开关,解码选项,位图处理和显示等);
(4)支持内存和磁盘上的图像缓存(设备的文件系统和SD卡);
(5)监听加载过程(包括下载进度);
下来我们详解如何配置使用Universal-Image-Loader来加载网络图片
1.下载Universal-Image-Loader
Github下载:
https://github.com/nostra13/Android-Universal-Image-Loader
Maven下载:
http://central.maven.org/maven2/com/nostra13/universalimageloader/universal-image-loader/
2.使用Universal-Image-Loader
(1)首先关联Universal-Image-Loader的库文件。然后在Application的onCreate中初始化ImageLoader
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
initImageLoader(this);
}
public static void initImageLoader(Context context) {
// This configuration tuning is custom. You can tune every option, you may tune some of them,
// or you can create default configuration by
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
config.threadPriority(Thread.NORM_PRIORITY - 2);
config.denyCacheImageMultipleSizesInMemory(); // 不会在内存中缓存多个大小的图片
config.diskCacheFileNameGenerator(new Md5FileNameGenerator()); // 为了保证图片名称唯一
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
// 内存缓存大小默认是:app可用内存的1/8
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.writeDebugLogs(); // Remove for release app
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
//ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));
}
}
(2)在AndroidManifest中配置Application
(3)在MyImageApadter中加载图片,初始化DisplayImageOptions(为了方便使用,我们将其抽取成一个类)
/** * Universal-Image-Loader-master options参数 */
public interface ImageLoaderOptions {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_default)// 加载图片过程中显示哪张图片
.showImageForEmptyUri(R.drawable.ic_default)// url为空的话显示哪张图片
.showImageOnFail(R.drawable.ic_default)// 加载图片失败显示哪张图片
.cacheInMemory(true)// 在内存中缓存该图片
.cacheOnDisk(true)// 在硬盘中缓存该图片
.imageScaleType(ImageScaleType.EXACTLY)// 将会对图片进一步缩放,缩放的程度参考ImageVIew的宽高
.bitmapConfig(Bitmap.Config.RGB_565)// 该种渲染模式也是比较节省内存的
.considerExifParams(true)// 会识别图片的方向信息
// .displayer(new FadeInBitmapDisplayer(800)).build();//渐渐显示的动画效果
.displayer(new RoundedBitmapDisplayer(28)).build();// 圆角的效果
// 显示大图的options
DisplayImageOptions pager_options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_default)// 加载图片过程中显示哪张图片
.showImageForEmptyUri(R.drawable.ic_default)// url为空的话显示哪张图片
.showImageOnFail(R.drawable.ic_default)// 加载图片失败显示哪张图片
.cacheInMemory(false)// 不在内存中缓存该图片
.cacheOnDisk(true)// 在硬盘中缓存该图片
.imageScaleType(ImageScaleType.EXACTLY)// 将会对图片进一步缩放,缩放的程度参考ImageVIew的宽高
.bitmapConfig(Bitmap.Config.RGB_565)// 该种渲染模式也是比较节省内存的
.considerExifParams(true)// 会识别图片的方向信息
.displayer(new FadeInBitmapDisplayer(500)).build();// 渐渐显示的动画效果
// .displayer(new RoundedBitmapDisplayer(28)).build();// 圆角的效果
}
(4)在getView方法中调用加载图片
/** * displayImage(uri, imageView, options, listener, progressListener); * 参数解析: * imageUrl : 图片的URL地址 * imageView : 显示图片的ImageView控件 * options : DisplayImageOptions配置信息 * listener : 图片下载情况的监听 * progressListener : 图片下载进度的监听 */
//加载图片
ImageLoader.getInstance().displayImage(Url.IMAGE, holder.iv_icon, ImageLoaderOptions.options);
–>拓展
渐渐显示的动画效果和圆角的效果不能同时设置,解决方法:我们在(3)中设置圆角效果,然后舍弃(4)的方法加载图片,而采用下面方法,到此,我们鱼与熊掌兼得。
//加载图片
ImageLoader.getInstance().displayImage(Url.IMAGE,holder.iv_icon, options
,new SimpleImageLoadingListener(){
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
FadeInBitmapDisplayer.animate(view, 800);//渐渐显示的效果
}
});
3.使用中常见问题与解决方法
(1)遇到横屏大图(width>height),低配置的手机或有的手机无法显示图片的问题
解决方法:在应用中配置ImageLoaderConfiguration参数,最好在Application中进行设置和配置(如上的MyApplication.java中),只能配置一次,如多次配置,则系统默认第一次的配置参数。
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext())
.memoryCacheExtraOptions(480, 800) // 保存每个缓存图片的最大长和宽
.threadPoolSize(3) // 线程池的大小 这个其实默认就是3
.threadPriority(Thread. NORM_PRIORITY - 2) //设置线程优先级
.denyCacheImageMultipleSizesInMemory() // 当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片
.memoryCache( new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024) // 设置缓存的最大字节
.tasksProcessingOrder(QueueProcessingType. LIFO) //设置图片下载和显示的工作队列排序
.defaultDisplayImageOptions(DisplayImageOptions. createSimple())
.imageDownloader(new BaseImageDownloader(getApplicationContext(),
5 * 1000, 30 * 1000))// connectTimeout : 超时时间
.writeDebugLogs().build(); // 开始构建
ImageLoader. getInstance().init(config); // 全局初始化此配置
按上面的设置和配置就解决了横屏大图在某些手机上不显示的问题,建议在Application中进行设置和配置,代码中配置的缺点:用一次配一次。
(2)低配置手机中大量图片时经常发生OOM的问题
项目中图片数量大、大小也大,在后台收集到的crash信息中看到发生了大量的OOM现象。
解决方法:
1)禁用在内存中缓存cacheInMemory(false)
2)减少配置的线程池的大小(.threadPoolSize(…)),建议1~5
3)在显示选项中使用 .bitmapConfig(Bitmap.Config.RGB_565) 因为RGB_565模式消耗的内存比ARGB_8888模式少两倍
4)配置中使用 .memoryCache(newWeakMemoryCache()) 或者完全禁用在内存中缓存
5)在显示选项中使用.imageScaleType(ImageScaleType.EXACTLY) 或 .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
6)避免使用 RoundedBitmapDisplayer. 调用的时候它使用ARGB-8888模式创建了一个新的Bitmap对象来显示
上面的条件,不一定都这样设置,可能改变其中的一些选项进行设置就能解决问题,对此要灵活运用
4.相关使用技巧
(1)只有在你需要让Image的尺寸比当前设备的尺寸大的时候,你才需要配置maxImageWidthForMemoryCache( )和maxImageHeightForMemoryCache( )这两个参数,比如缩放图片的时候。其他情况下,不需要做这些配置,因为默认的配置会根据屏幕尺寸以最节约内存的方式处理Bitmap。
(2)在设置中配置线程池的大小。一个大的线程池会允许多条线程同时工作,但是也会显著的影响到UI线程的速度。但是可以通过设置一个较低的优先级来解决:当ImageLoader在使用的时候,可以降低它的优先级,这样UI线程会更加流畅。在使用ListView的时候,UI 线程经常会不太流畅,所以在你的程序中最好设置threadPoolSize( )和threadPriority( )这两个参数来优化你的应用。
(3)memoryCache( )和memoryCacheSize( )这两个参数会互相覆盖,所以在ImageLoaderConfiguration中使用一个即可。
(4)diskCacheSize( )、diskCache( )和diskCacheFileCount( )这三个参数会互相覆盖,只使用一个即可。
特别注意:不要使用discCacheSize( )、discCache( )和discCacheFileCount( )这三个参数,因为他们已经弃用了。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/盐析白兔/article/detail/105924
推荐阅读
article
【Lora模型训练过程报错】Error no
kernel
image
is
available
f...
这是因为旧的显卡 例如10系列不支持unit8类型。_error no
kernel
image
is availabl...
赞
踩
article
Python
|
enumerate
() 函数_
enumerate
(
loader
)...
用来添加一个索引>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']>...
赞
踩
article
莫烦
pytorch
(8)——批
训练
_
enumerate
(
loader
)...
首先介绍一下import torch.utils.data as Data,这在
训练
过程中基本都会用到。该接口大多用来读...
赞
踩
article
原理和代码解读:用
Diffusion
Models
高清图像修复(
Image
Inpainting
)_...
在最近的
Diffusion
Models
应用中,
Image
Inpainting
+ControlNet/Lora等工作在...
赞
踩
article
Diffusion
Models
for
Image
Restoration
and Enhance...
图像恢复(IR)一直是低水平视觉领域不可或缺的一项具有挑战性的任务,它致力于提高因各种形式的退化而失真的图像的主观质量。...
赞
踩
article
DiffIR
:
Efficient
Diffusion
Model
for
Image
Restor...
DiffIR
,一种强大、简单、高效的基于扩散模型的的
图像
修复方法。与
图像
生成不同的是,输入
图像
的大部分像素都是给定的。因...
赞
踩
article
Unity
UGUI
RawImage
_
unity
raw
image
...
渐入动画效果切换动画效果使用
RawImage
加Texture实现分镜显示_
unity
raw
image
unity
ra...
赞
踩
article
unity
使用
image
组件显示
图片
_
unity
image
设置
图片
...
在
unity
中有多种显示
图片
的方法,我们这里使用的
image
组件,在场景中右键新建UI ---> Image,并点击转态...
赞
踩
article
Unity
使用WWW加载网络
图片
_
unity
image
加载网络
图片
...
public class ButtonHTTP : MonoBehaviour{ //
图片
的地址 string ur...
赞
踩
article
在
Unity3D
中
加载
外部
图片
的两种方法_
unity3d
ui
.
image
加载
图片
...
喜闻乐见的WWW方式 喜闻乐见的WWW方式之所以喜闻乐见,这是因为这是我们最为熟悉的一种,我们都知道通过WWW可以从网...
赞
踩
article
Android
网络
图片
加载
框架:
Universal
-
ImageLoader
简介_lmageloade...
网络
图片
加载
框架:
Universal
-
ImageLoader
github开源地址:https://github.com...
赞
踩
article
【
Android
】
Universal
Image Loader
图片
加载
框架无法
加载
https
图片
问题...
前段时间,公司在开发一个项目,项目前期没有考虑到数据加密,后来决定使用
https
对传输的数据进行加密传输,结果出现了其他...
赞
踩
article
有关
使用
Universal
-
Image
-
Loader
的
遇到
的
问题
和
使用
小技巧...
今天我们来分析一下
使用
Universal
-
Image
-
Loader
异步加载图片时遇到
的
一些
问题
和解决办法。今天咱们
的
公众...
赞
踩
article
Android
图片
加载库—Universal-
ImageLoader
用法详解_universal-i...
介绍
Android
-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使...
赞
踩
article
使用
Unversial
-
image
-
loader
来异步加载网络
图片
和本地
图片
(一)_
com
.nost...
现在一个应用最最直观表达意思的就是
图片
了吧,现在互联网就是以
图片
加视频的形式主流传播信息,所以
图片
的显示是如此的重要,最...
赞
踩
article
Android
-
Universal
-
Image
-
Loader
图片加载库 详细分析_loaderim...
github地址:https://github.com/nostra13/
Android
-
Universal
-
Image
...
赞
踩
article
Android使用Universal-
ImageLoader
在
ListView
中加载网络图片简单示例...
大家好,最近在问答专区上看到了很多朋友问如何加载网络图片或者加载网络图片失败的问题,因为之前没有整理过类似的文章,但是也...
赞
踩
article
Android
知识总结:
Universal
-
Imageloader
学习笔记4 使用
Universal
...
ImageLoader
管理
本地
图片
前面我们讨论了ImageLoader在
图片
下载与缓存中的一些使用方法,那么为什么我们要...
赞
踩
article
从源代码
分析
Universal
-
Image
-
Loader
中的
线程
池
...
一般来讲一个网络访问就需要App创建一个
线程
来执行,但是这也导致了当网络访问比较多的情况下,
线程
的数目可能积聚增多,虽然...
赞
踩
article
报错:在使用开源项目Android-Universal-
Image
-
Loader
报错_univers...
报错:在使用开源项目Android-Universal-
Image
-
Loader
报错“java.lang-Runtime...
赞
踩
相关标签
深度学习
人工智能
AI作画
python
pytorch
计算机视觉
神经网络
超分辨率重建
图像处理
unity
c#
游戏引擎
android
图片
框架
jar