问题描述:今天编写设置头像代码时发现裁剪之后的照片使用setImageURI加载图片时,第一次能够加载成功,第二次之后无法正常加载成功,退出App重新进入又能正常加载,第二次又不行。
原因分析:经过多方排查之后发现,是因为ImageView.setImageURI会对传入的uri进行缓存,如果两次传入的uri是一样的,即两次传入图片地址一样的话,setImageURI会判断为同一图片加载两次,会直接加载之前上一次的缓存,结果就出现第一次加载成功,第二次却失败的情况。
解决方案:
方案一:确保每次传入的图片地址不一样,用日期命名图片等,避免setImageURI判定为同一张图片。
方案二:使用setIamgeURI之前先加载一个null,清除原先的缓存,之后再加载图片就不会有缓存了。
APP 代码:
image.setImageURI(null)
image.setImageURI(Uri.fromFile(File(path)))
方案三:不适用setIamgeURI,用别的图片加载方式代替。(如果使用setImageBitmap的话需要注意图片的recycle问题)