解决方案一、使用findViewWithTag
findViewWithTag算是一种比较简单易懂的解决方案,
先调用ImageView的setTag()方法,并把当前位置图片的URL地址作为参数传进去,这个是为后续的findViewWithTag()方法做准备。
解决方案二、使用弱引用关联,
但实际上弱引用只是辅助手段而已,最主要的还是关联,这种解决方案的本质是要让ImageView和BitmapWorkerTask之间建立一个双向关联,互相持有对方的引用,在通过适当的逻辑判断来解决图片乱序问题,然后为了防止出现内存泄漏的情况,双向关联要使用弱引用的方式建立。相比于第一种解决方案,第二种解决方案明显复杂不少,但是在性能和效率方面都会有更好的表现。
解决方案三、使用NetworkImageView
前面两种解决方案都需要我们自己去做额外的逻辑处理,因为ImageView本身是不能自动解决这个问题的,但是如果我们使用NetworkImageView这个控件的话就分成简单了,它自身就已经考虑到了这个问题,我们之间使用它就可以了,不用走任何额外的处理也不会出现图片乱序的情况。
NetworkImageView是volley当中提供的控件
这主要是得益于Volley的出色设计。由于Volley在网络方面的封装非常优秀,它可以保证,只要是取消掉的请求,就绝对不会进行回调,既然不会回调,那么也就不会回到NetworkImageView当中,自然就不会出现乱序的情况了