为了账号安全,请及时绑定邮箱和手机立即绑定

为什么handleMessage可以直接引用ImageLoader实例的成员变量而不发生错乱?

为什么总觉得这里怪怪的,在handleMessage中直接用ImageLoader实例的成员变量mImageView和mUrl,假如要调用适配器的getView方法6次,那么就要另外开启6个线程,每个线程都会sendMessage一次,但是谁先谁后发送message是不定的,而在先发送的message一定会先被handleMessage所处理,但是,在主线程中的handleMessage在处理message的时候会不会用用到不是与之对应的ImageLoader实例的成员变量mImageView和mUrl呢?

正在回答

3 回答

今天又看了一下本次课程,发现handleMessage在处理message时处理的mImageView和mUrl确实不对应,作者用mImageView.getTag().equals(mUrl)的方式解决了该问题,但为什么出现这个问题并没有说清楚,求高人指导!

0 回复 有任何疑惑可以回复我~
#1

xiaoc024

handleMessage在处理message时处理的mImageView和mUrl不对应是不可避免的(同时使用ConvertView和异步机制),只有当处理到对应的url时才更新ui,所以加了判断语句。
2016-05-30 回复 有任何疑惑可以回复我~

每调用一次 getView 方法就会新建一个 ImageLoader 对象,每个ImageLoader 对象内部都有自己的成员变量mHandler,mImageView,mUrl,所以不会出现你说的错乱的情况。

0 回复 有任何疑惑可以回复我~

你说的“但是谁先谁后发送message是不定的”这个我不太确定,不敢乱解释,但是即使“用到不是与之对应的ImageLoader实例的成员变量mImageView和mUrl”,position和imageview、url是对应的,所以handler总会把图像加载到这个图片对应的position和imageview上

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android必学-异步加载
  • 参与学习       50627    人
  • 解答问题       311    个

了解Android中的异步加载处理方法,这是面试问的最多的知识点

进入课程

为什么handleMessage可以直接引用ImageLoader实例的成员变量而不发生错乱?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信