安卓半成品-ImageView 如何加载网络图片

作者:vkvi 来源:千一网络(原创) 日期:2018-4-18

别看安卓三天两头都在推新版本,才几年功夫都 8.0 了。可是安卓中的控件半成品一大堆一大堆的,屁大点事都要开发人员操心。

今天要说的这个半成品就是 ImageView 如何加载网络图片。

原理

就是我们自己用 HTTP 去将图片流 download 下来,然后赋给 ImageView。

具体代码可以参见:Android在ImageView上直接显示网络图片。

本文主要说的是坑

一、不要在子线程中更新界面。

安卓规定 Http 请求必须放在异步中,而界面更新必须是在主线程中。所以上面示例文章使用了 Handler 通知主线程更新图片。当然我们也可以用其他的方式,比如:runOnUiThread。具体可参见:快速切换到主线程更新UI的几种方法

二、在我们重载的控件中应该设置一个属性,用以存储当前 URL,比如叫 m_url,并在 Http 请求之前,判断请求的 URL 和 m_url 是否一致

为什么这样做呢?目的是每次发起 Http 请求之前,判断请求的 URL 和 m_url  是否一致,如果一致就不要重复请求了。

要知道,如果 ImageView 放在 ListView 中,随便一滑动,都会触发 ImageView 重新加载。

三、在 Http 请求完成后,要判断请求的 URL 和 m_url 是否一致

如果不一致,就抛弃 Http 下来的数据流。因为我们可能两次为 ImageView 设置了 url,如果第一次 Http 速度慢,第二次 Http 速度快,那么最终结果为显示第一次的图片,这显然不是我们想要的,所以设置一个判断。

四、图片要缓存起来。

缓存起来,以后就用 setImageBitmap(BitmapFactory.decodeFile(cacheFilePath));。

如果不缓存,特别是针对放在 ListView 中的 ImageView,随便一滑动 ListView,又是再次请求,耗流量都是小事,每次都卡得要死。

你前面那位网友看了:IIS URL 重写注意事项

▲▲▲嘿,欢迎转载传播本站原创文章,尽量保留来源噢。▲▲▲

文章评论
标题:必填
内容:
本站永远终止与捏造“罪名”不支付广告费的某度联盟合作。
vkvi
vkvi

作者简介: vkvi,致力于 .NET Web 开发、移动开发的技术推广,在 .NET、SQL Server、Windows Server 等方面有深入研究和丰富经验,10 年间共计撰写文章 4000 余篇。 主持金融、国土、农业、电商等多个行业项目执行, 推行“技术提升生产力、人心决定成功率”的管理理论。 联系他