Glide4將SimpleTarget(自由使用Target)和ViewTarget(自定義View中使用Target)廢棄了,分別由CustomTarget和CustomViewTarget代替,原因:
- 使用SimpleTarget不會(huì)強(qiáng)制要求實(shí)現(xiàn)onLoadCleared方法,容易造成顯示錯(cuò)亂或者奔潰問(wèn)題;
- 使用ViewTarget也不強(qiáng)制要求實(shí)現(xiàn)onLoadCleared方法,也容易出問(wèn)題;即使實(shí)現(xiàn)了也要求必須要在onLoadCleared中調(diào)用super.onLoadCleared方法(使用者都容易忽略),否則還是會(huì)出問(wèn)題;
- 使用CustomTarget則要求必須實(shí)現(xiàn)onLoadCleared方法;
- 使用CustomViewTarget則不需要實(shí)現(xiàn)onLoadCleared(final的),而是要求必須實(shí)現(xiàn)onResourceCleared方法(在onLoadCleared方法中調(diào)用)。
總的來(lái)說(shuō)就是保證資源能夠得到正常釋放!
CustomTarget使用示例:
Glide.with(this)
.asBitmap()
.load(imagePath)
.into(object : CustomTarget<Bitmap>(){
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
imageView.setImageBitmap(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {
// this is called when imageView is cleared on lifecycle call or for
// some other reason.
// if you are referencing the bitmap somewhere else too other than this imageView
// clear it here as you can no longer have the bitmap
}
})