Android 主流网络图片加载缓存库框架Universal-ImageLoader的使用
2016-01-12 18:53
651 查看
在APP开发中,网络图片的处理和加载时非常重要的一部分,拖处理如果做的不好会导致OOM及APP体验卡顿不流畅。Universal-ImageLoader图片处理库应运而生。
Universal-ImageLoader:
是目前Andorid主流的图片处理库框架之一,在Anroid图片处理中需要考虑的问题很多,例如OOM、图片缓存和网络图片加载、多线程问题及图片压缩处理等等负责的问题。但是Universal-imageLoader以及帮我们把这些问题处理好了,且对外提供了相应完善的请求API,我们只需要按照要求使用即可。
特点:
支持本地图片和网络图片的多线程异步加载和缓存处理
个性化的配置自己想买的ImagerLoader
图片加载过程的监听回调
自动对加载的托针对当前剩余内存进行裁剪优化,防止OOM
较好的控制图片的加载过程,例如暂停托加载,重新开始加载图片
缺点:
没有对本地文件压缩处理的相关API方法以及默认都是Src模式设置图片,没有针对BackGround熟悉开发API
配置:
可以全局配置:在Application里进行配置
可以针对单一加载图片的地方配置
例如:可以配置图片缓存保存路径、线程池内加载的熟练、缓存的文件数量、每个缓存文件的最大长宽、加载过程和加载失败时显示的图片等等;
用法:Universal-ImagerLoader支持网络图片的加载和本图片的加载,而且可以自动缓存、自动根据当前手机环境进行压缩处理防止出现OOM;也可以监听整个图片的加载过程,且可控。
案例:
MyApplication.java:
Universal-ImageLoader:
是目前Andorid主流的图片处理库框架之一,在Anroid图片处理中需要考虑的问题很多,例如OOM、图片缓存和网络图片加载、多线程问题及图片压缩处理等等负责的问题。但是Universal-imageLoader以及帮我们把这些问题处理好了,且对外提供了相应完善的请求API,我们只需要按照要求使用即可。
特点:
支持本地图片和网络图片的多线程异步加载和缓存处理
个性化的配置自己想买的ImagerLoader
图片加载过程的监听回调
自动对加载的托针对当前剩余内存进行裁剪优化,防止OOM
较好的控制图片的加载过程,例如暂停托加载,重新开始加载图片
缺点:
没有对本地文件压缩处理的相关API方法以及默认都是Src模式设置图片,没有针对BackGround熟悉开发API
配置:
可以全局配置:在Application里进行配置
可以针对单一加载图片的地方配置
例如:可以配置图片缓存保存路径、线程池内加载的熟练、缓存的文件数量、每个缓存文件的最大长宽、加载过程和加载失败时显示的图片等等;
用法:Universal-ImagerLoader支持网络图片的加载和本图片的加载,而且可以自动缓存、自动根据当前手机环境进行压缩处理防止出现OOM;也可以监听整个图片的加载过程,且可控。
案例:
MyApplication.java:
import java.io.File; import android.app.Application; import android.graphics.Bitmap; import android.os.Environment; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import com.nostra13.universalimageloader.core.download.BaseImageDownloader; public class MyApplication extends Application { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this) .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽 .discCacheExtraOptions(480, 800, null) // Can slow ImageLoader, use it carefully (Better don't use // it)/设置缓存的详细信息,最好不要设置这个 .threadPoolSize(3) // 线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache // implementation/你可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) .discCacheSize(50 * 1024 * 1024) .discCacheFileNameGenerator(new Md5FileNameGenerator()) // 将保存的时候的URI名称用MD5 加密 .tasksProcessingOrder(QueueProcessingType.LIFO) .discCacheFileCount(100) // 缓存的文件数量 .discCache( new UnlimitedDiscCache(new File(Environment .getExternalStorageDirectory() + "/myApp/imgCache"))) // 自定义缓存路径 .defaultDisplayImageOptions(getDisplayOptions()) .imageDownloader( new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) .writeDebugLogs() // Remove for release app .build();// 开始构建 ImageLoader.getInstance().init(config); } private DisplayImageOptions getDisplayOptions() { DisplayImageOptions options; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_launcher) // 设置图片在下载期间显示的图片 .showImageForEmptyUri(R.drawable.ic_launcher)// 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.drawable.ic_launcher) // 设置图片加载/解码过程中错误时候显示的图片 .cacheInMemory(true)// 设置下载的图片是否缓存在内存中 .cacheOnDisc(true)// 设置下载的图片是否缓存在SD卡中 .considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,翻转) .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// // .delayBeforeLoading(int delayInMillis)//int // delayInMillis为你设置的下载前的延迟时间 // 设置图片加入缓存前,对bitmap进行设置 // .preProcessor(BitmapProcessor preProcessor) .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位 .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少 .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间 .build();// 构建完成 return options; } }MainActivity:
import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; /** * 1、 Universal-ImageLoader的配置 * * 2、用Universal-ImageLoader加载网络图片和本地图片 * * @author Administrator * */ public class MainActivity extends Activity { private ImageLoader loader; private ImageView iv_img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loader = ImageLoader.getInstance(); iv_img = (ImageView) this.findViewById(R.id.iv_img); String uri = "file:///" + "本地路径"; loader.displayImage( "http://xue.youdao.com/zx/wp-content/uploads/2015/12/723.jpg", iv_img, new ImageLoadingListener() { @Override public void onLoadingStarted(String arg0, View arg1) { Log.i("info", "onLoadingStarted"); } @Override public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { Log.i("info", "onLoadingFailed"); } @Override public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { Log.i("info", "onLoadingComplete"); } @Override public void onLoadingCancelled(String arg0, View arg1) { Log.i("info", "onLoadingCancelled"); } }); } }
相关文章推荐
- 安装nginx时安装http_stub_status_module
- http协议的实现 httpd的基础配置
- 人工智能之人工神经网络-纵览
- tcpkill清除异常tcp连接
- 利用dsniff的tcpkill杀TCP连接
- C#静态类 转载:(原文:http://www.cnblogs.com/chenlulouis/ )
- http://my.oschina.net/huangyong/blog/372491?fromerr=hobPLCmQ#OSC_h2_5
- Linux 系统应用编程——网络编程(socket编程)
- tcpdump捕包乱序的解决方案
- nginx 日志过滤网络爬虫
- Let's do our own full blown HTTP server with Netty--转载
- 基于Oozie实现MapReduce作业的自动提交功能
- Linux网络配置
- java网络编程
- Android 网络编程--URL互联网资源
- 获取视频的第一帧缩略图(本地视频、网络视频)
- Android网络图片加载框架:Universal-ImageLoader简介
- 使用CocoaPods做依赖管理(淘宝源更换为HTTPS)--转自 唐巧技术博客
- 三招教你用VLC Player 通过RTSP over Http 播放 live555 mediasever 来的流媒体
- Linux系统VM网络配置