在android开发中我们要进行网络交互请求数据时,避免不了对图片的加载与缓存。下面讲下我用到的方法:
一.运用DisplayImageOption加载。运用架包再进行配置就行(架包已上传)。
//加载图片 public static void getview(String icon_path,ImageView imageview){ ImageLoader loader=ImageLoader.getInstance(); //图片请求路径给ImageView设置图片 loader.displayImage("http://192.168.0.107:8080/LaQuan/"+icon_path, imageview);
在application中创建DisplayImageOption加载
public void onCreate() { super.onCreate(); //加载并缓存图片配置 // 使用DisplayImageOptions.Builder()创建DisplayImageOptions DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() .cacheInMemory() //1.8.6包使用时候,括号里面传入参数true 设置下载的图片是否缓存在内存中 .cacheOnDisc() //1.8.6包使用时候,括号里面传入参数true 设置下载的图片是否缓存在SD卡中 .build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .defaultDisplayImageOptions(defaultOptions) .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .discCacheFileNameGenerator(new Md5FileNameGenerator()) .tasksProcessingOrder(QueueProcessingType.LIFO) .build(); ImageLoader.getInstance().init(config); map=new HashMap<String, Object>(); }
二.通过异步任务加载图片保存到缓存
; private LruCache<String,Bitmap> mLruCache; final int maxSize=(int) Runtime.getRuntime().maxMemory(); //运行时最大内存 final int cacheSize=maxSize/5; //设置将最大内存的五分之一用于缓存 public TuanAdapter(ArrayList<Goods> list, Context context) { super(); mLruCache=new LruCache<String,Bitmap>(cacheSize){ protected int sizeOf(String key, Bitmap value) { return value.getByteCount()/1024; } }; }
//通过路劲异步加载图片并给ImageView设置图片 public void lodadBitmap(ImageView imageview,String url){ Bitmap bitmap=null; GetImageAsyncTask asyncTask=new GetImageAsyncTask(imageview,mLruCache); bitmap=asyncTask.getBitmapFromMemoryCache(url); if(bitmap!=null){ //如果缓存中有图片就直接给ImageView设置 imageview.setImageBitmap(bitmap); }else{ //如果缓存中没有图片就进行异步加载 imageview.setImageResource(R.drawable.ic_launcher); asyncTask.execute(url); //通过路劲启动异步加载 } }
异步加载类
public class GetImageAsyncTask extends AsyncTask<String,Integer,Bitmap>{ private ImageView mImageView; private LruCache<String,Bitmap> mLruCache; public GetImageAsyncTask(ImageView mImageView,LruCache<String,Bitmap> mLruCache) { super(); this.mImageView = mImageView; this.mLruCache=mLruCache; } //异步加载图片��̨ ���� @Override protected Bitmap doInBackground(String... url) { Bitmap mBitmap=null; try { URL imgUrl=new URL(url[0]); InputStream is=imgUrl.openConnection().getInputStream(); mBitmap=BitmapFactory.decodeStream(is); addBitmapToMemoryCache(url[0],mBitmap); } catch (IOException e) { e.printStackTrace(); } return mBitmap; } //从内存获取图片 public Bitmap getBitmapFromMemoryCache(String key){ return mLruCache.get(key); } //将图片保存至内存 public void addBitmapToMemoryCache(String key,Bitmap bitmap){ if(mLruCache.get(key)==null){ mLruCache.put(key, bitmap); } } //异步加载后调用方法�ִ�� @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); mImageView.setImageBitmap(result); } }
三.运用Google提供Volley架包进行图片的获取与缓存
public class BitmapLruCache implements ImageCache { private LruCache<String, Bitmap> mCache; public BitmapLruCache(){ //设置最大缓存为10M int maxCache=10*1024*1024; mCache = new LruCache<String, Bitmap>(maxCache) { @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } }; } //从缓存获取图片 @Override public Bitmap getBitmap(String url) { return mCache.get(url); } //将图片存入缓存 @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); }
public class App extends Application { /** * 整个App的图片内存缓存类 */ public static BitmapLruCache bitmapLruCache; /** * 整个App内AVOS相关类要用到的RequestQueue */ public static RequestQueue requestQueue; @Override public void onCreate() { super.onCreate(); requestQueue=Volley.newRequestQueue(getApplicationContext()); bitmapLruCache=new BitmapLruCache(); } }
ImageLoader imageLoader=new ImageLoader(App.requestQueue, App.bitmapLruCache); //给ImageView设置图片(imgurl为图片路径) holder.img.setImageUrl(imgurl,imageLoader);
相关推荐
在移动应用开发中,图片加载缓存是一个至关重要的环节,特别是...综上所述,"图片加载缓存测试"项目关注的是如何在移动应用中实现高效、可控的图片加载与缓存机制,通过合理的设计和测试确保用户体验和系统性能的平衡。
在安卓应用开发中,图片加载缓存是一个至关重要的环节,特别是在处理大量图片或者高分辨率图片时,合理地管理和缓存图片资源能显著提高应用性能,减少内存消耗,并且提升用户体验。"图片加载器"通常指的是用于高效...
本资源提供了使用 Imageloader 实现本地图片加载,并结合线程池与LIFO(后进先出)缓存策略来防止OOM的问题。下面我们将详细探讨这些知识点。 1. **Imageloader**:Imageloader 是一个流行的 Android 图片加载库,...
本资源“安卓图片加载缓存相关-Android平台可以根据手势简单缩放图片.rar”聚焦于实现手势缩放功能以及图片加载缓存的管理。下面我们将详细探讨这两个主题。 首先,手势缩放是Android中常见的交互方式,它允许用户...
在Android应用开发中,高效的网络图片加载、缓存与显示是至关重要的,特别是在处理大量图片数据的场景下,如社交应用、电商应用等。这里我们将深入探讨如何利用Android-Universal-Image-Loader库来实现这一目标。 ...
这个"异步加载缓存图片"的小例子,可能涵盖了以上的一些技术点,通过阅读源代码,我们可以学习到如何在实际项目中实现这些功能,提升应用的性能和用户体验。在开发过程中,应该根据具体需求和场景,灵活运用这些工具...
6. **生命周期管理**:库与Activity/Fragment的生命周期紧密结合,能自动处理图片加载和取消,避免资源泄露。 7. **图片加载监听**:提供加载状态监听接口,开发者可以获取到加载进度、成功、失败等信息,用于实现...
这个“安卓图片加载缓存相关-ViewPager动态加载网络图片.rar”压缩包可能包含了一些示例代码,帮助开发者理解如何在ViewPager中有效地加载和缓存网络图片。下面我们将深入探讨这一主题。 首先,我们需要了解...
4. **生命周期管理**:为了防止内存泄漏,需要正确处理图片加载和缓存的生命周期。比如,当页面不再使用时,应释放内存中的图片资源。同时,需要定期清理过期的缓存图片,以优化存储空间。 5. **图片格式转换与优化...
程序运行后,将获取网络上下载的照片,缓存更新至本地,再次开启无网状态下或网络图片传输异常情况下,程序将读取本地缓存图片。
"安卓图片加载缓存相关-Android-异步图片加载器.zip"这个压缩包中可能包含了一个实现异步图片加载和缓存的示例项目。异步加载能够避免UI线程阻塞,提高用户体验,而缓存机制则能减少网络请求,加快图片显示速度。 ...
例如,SDWebImage是一个流行的iOS图片加载库,它支持异步下载和缓存图片。使用SDWebImage,我们可以在UIImageView中直接设置图片URL,库会自动处理下载和显示的过程,如下所示: ```swift import SDWebImage ...
这些库能够自动处理线程切换,使图片加载工作在后台进行,加载完成后在UI线程更新视图。 2. **内存缓存**:缓存图片到内存中可以快速获取,避免重复下载。Android的WeakHashMap或者LruCache可以用来做内存缓存,...
2. 使用CSS:另一种方法是通过在HTML中使用CSS设置默认背景图片,当真实图片加载失败时,会显示默认图片。 ```html ``` 三、实现图片点击事件 1. JavaScript交互:使用JavaScript来监听图片点击事件,然后通过`...
在iOS开发中,异步加载和缓存是两个至关重要的概念,特别是在处理大量数据和多媒体内容时,如在UITableView或UICollectionView中显示图片。这两个技术能够显著提升应用性能,提高用户体验,同时节省系统资源。 首先...
这个压缩包"安卓图片加载缓存相关-Android图片二级缓存.zip"显然包含了关于如何实现高效图片加载和二级缓存的源码示例。这里我们将深入探讨图片加载缓存的概念、二级缓存的工作原理以及相关技术。 图片加载缓存主要...
在安卓应用开发中,图片加载缓存是一个至关重要的优化环节,尤其对于那些图像密集型的应用,如社交媒体、电商应用等。本示例“安卓图片加载缓存相关-图片三级缓存DEMO从内存网络本地来对数据进行获取”提供了一个三...
本压缩包文件“安卓图片加载缓存相关-afinal框架实现图片的简单异步缓存加载.rar”包含了使用Afinal进行图片管理的相关代码示例。 首先,我们来理解一下图片加载缓存的基本原理。图片加载缓存通常包括内存缓存和...
4. 图片加载逻辑:在getView()方法中,根据当前位置判断是否需要加载图片。如果图片已经在缓存中,直接从缓存获取;否则启动异步任务加载图片。 5. 拖动时不加载:在ListView的OnScrollListener中,监听滚动事件。当...