@@ -21,6 +21,8 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
2121 private var imageLoader: ControlledRunner <Unit > = ControlledRunner ()
2222 private var lastBitmap: Bitmap ? = null
2323
24+ private var shouldClearBitmap = true
25+
2426 fun setImageBitmap (lifecycleOwner : LifecycleOwner , provider : suspend () -> Bitmap ) {
2527 lifecycleOwner.lifecycle.removeObserver(this )
2628 lifecycleOwner.lifecycle.addObserver(this )
@@ -36,7 +38,9 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
3638 }
3739 withContext(Dispatchers .Main ) {
3840 if (lastBitmap?.isRecycled == false ) {
41+ shouldClearBitmap = false
3942 super .setImageBitmap(lastBitmap)
43+ shouldClearBitmap = true
4044 }
4145 }
4246 }
@@ -46,26 +50,31 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
4650 override fun setImageBitmap (bm : Bitmap ? ) {
4751 imageLoader.cancel()
4852 super .setImageBitmap(bm)
53+ tryClear()
4954 }
5055
5156 override fun setImageDrawable (drawable : Drawable ? ) {
5257 imageLoader.cancel()
5358 super .setImageDrawable(drawable)
59+ tryClear()
5460 }
5561
5662 override fun setImageResource (resId : Int ) {
5763 imageLoader.cancel()
5864 super .setImageResource(resId)
65+ tryClear()
5966 }
6067
6168 override fun setImageURI (uri : Uri ? ) {
6269 imageLoader.cancel()
6370 super .setImageURI(uri)
71+ tryClear()
6472 }
6573
6674 override fun setImageIcon (icon : Icon ? ) {
6775 imageLoader.cancel()
6876 super .setImageIcon(icon)
77+ tryClear()
6978 }
7079
7180 override fun onStateChanged (source : LifecycleOwner , event : Lifecycle .Event ) {
@@ -74,4 +83,10 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
7483 }
7584 }
7685
86+ private fun tryClear (){
87+ if (shouldClearBitmap) {
88+ lastBitmap?.recycle()
89+ }
90+ }
91+
7792}
0 commit comments