网络图像加载

所谓经验,不是指能找到一条通向目标的捷径,而是在通向目标的过程中能够有效避开各种“坑”。谈一谈不借助第三方框架,加载网络图像过程中遇到的各种“坑”。

应用背景:通过tableView做一个app列表的展示页,其中app的图标需要从网络上获取。

开始的状态:同步加载网络图片

问题: 1. 如果网速慢,会给用户非常明显的”卡”的感觉

2. 每次显示 cell,都会重新加载图片

解决思路: 使用多线程加载

问题: 3.tableviewCell需要交互一下才能显示出图片

解决思路: 使用占位图像,除了能够设置图像,还能够把 imageView 的 frame 给撑开!

问题: 4.如果图片下载速度不一样,用户又来回滚动cell,可能出现”图片错行”的问题

解决思路: 不能直接改变视图,给模型中增加一个image的属性,通过模型来控制视图,在图像下载完成之后,刷新指定的行。

问题: 5.如果某张下载速度非常慢,用户快速来回滚动表格,会造成下载操作会重复创建!

解决思路: 用字典做一个”下载操作缓冲池”(图片url做key),创建下载操作之前先判断池中有没有已经存在的操作。

问题: 6.目前图片下载完成之后,是保存在模型中的!如果应用程序运行过程中,出现内存警告需要释放内存的时候,不好释放。

解决思路: 图片不能保存在模型中,建立图片缓冲池。如果内存警告,直接清空图片缓存即可!

问题: 7.”下载操作缓冲池”中的内容,在下载完成之后没有删除,造成内存浪费。如果一个下载操作失败,下次刷新的时候不能够重新下载。

解决思路: 下载完成之后,清除缓冲池!

问题: 8.创建操作时使用了block,容易引起循环引用的问题

解决思路: 借助 dealloc 辅助判断,没有出现循环引用。因为下载操作在执行完毕之后会从”下载操作缓冲池”中移除,打破了循环引用。

时间: 2024-12-25 09:56:52

网络图像加载的相关文章

Android ion异步网络和图像加载大大简化网络开发强烈推荐

Ion是一个Android异步网络和图像加载库,优雅得API大大简化了网络操作.地址:https://github.com/koush/ion 特点: 异步下载: Images into ImageViews or Bitmaps (animated GIFs supported too) JSON (via Gson) Strings Files Java types using Gson 易于使用地流式API Automatically cancels operations when the

android 请求网络异步加载

/** * 封装ProecssDialog对话框 * */ public class LoadDialog extends ProgressDialog { private String title = "进度对话框"; private String message = "加载数据中...."; public LoadDialog(Context context, int theme) { super(context, theme); } /** * 用默认的标题和

Android Asynchronous Http Client--Android 开源的网络异步加载类

整理Android Asynchronous Http Client的使用 Android Asynchronous Http Client(AHC) 一个回调式的Android网络请求库 概括: AHC是基于Apache的HttpClient 库,所有的网络请求过程在UI线程之外进行,而回调是在Handler里面处理.也可以再Service或者后台程序里面使用,这个库会自动识别并在相应的Context进行处理. 特点: 异步发送HTTP请求,在回调函数中处理响应 HTTP请求过程不在UI线程进

android优化从网络中加载图片速度。。

从网络中加载图片主要要注意两个方面的问题: 1.内存管理:图片占的内存很大,假如图片数量多,很容易让系统抛出out of memory的异常. 同时我们也要注意不同android版本中内存管理的区别. 2.性能:图片的加载速度,和加载图片时不影响UI的流畅性 尤其是在ViewPager,GridView 和ListView等等需要在短时间内加载大量图片时,上面两个问题就更加突出了... 要解决上面这个两个问题,我们要用到的技术 1.缩减加载的图片的bitmap 可以通过实现显示图片的view的大

Android设置Notification从网络中加载图片,解决点击无法消失的bug

Notification的构造函数中只支持使用资源文件的图片作为图片,但是如果我们想用网络中的图片怎么办呢. 我们知道,给Notification设置内容的时候调用的是setLatestEventInfo方法,当我们点击去看该方法的时候,所有的结果都一目了然了. public void setLatestEventInfo(Context context, CharSequence contentTitle, CharSequence contentText, PendingIntent con

跟我一起学opencv 第一课之图像加载,修改,保存

使用opencv前记得引入库和头文件: #include<opencv2\opencv.hpp> 1.加载图像(cv::imread)(OPENCV 支持 JPG,PNG,TIFF等常见格式图像文件加载) imread函数原型是: CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR ); ------imread加载一副由filename指定的图像文件并返回一个Mat对象 ------第一个

Canvas---Canvas图像加载、利用javascript回调机制实现一个图片加载器

canvas的drawImage方法有个缺点,就是当图片还未加载完成时调用它将无效. 当然,在高速运转的游戏主循环中,可以直接忽略这个问题,或者用 img.complete == true来做下判断. 在游戏循环之外的地方,可以用 img.onload = function (){};这样的回调解决. 但是,如果需要实现预先大量图片的加载,并且将加载进度告知用户,这时就需要一个图片加载器. 一.图片加载器原理 1.对于每张图片,开启对应的一个线程去负责加载,加载完成后修改一个变量的值-loade

仿美团全部分类页面(网络数据加载+Listview+Textview自动生成)

  省去前因后果,咱直奔主题,我们首先来看一下美团最新版本的关于全部分类的布局. 进入全部分类 点击小分类中的下拉TextView弹出完整小分类 从下图可以看出明显的生成LinearLayout再生成TextView痕迹 ListView +自动生成TextView. 0.布局里写个listview,初始化并设置自定义适配器 1.从服务器哥们手里拿数据 HttpRequestDAO.getInstance().request(WebConstrant.getMoreCategory, null,

IOS-SDWebImage根据网络状态加载图片

iOS开发-你真的会用SDWebImage? 2016-05-17 hosea_zhou 有意思啊 原创作者:hosea_zhou 原文地址:http://www.jianshu.com/p/dabc0c6d083e 猿吧 - 资源共享论坛: http://www.coderbar.cn 最近论坛里有最新的视频资料哦! SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高.但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage. 使用场景:自定义的UITabl