@@ -21,6 +21,8 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
21
21
private var imageLoader: ControlledRunner <Unit > = ControlledRunner ()
22
22
private var lastBitmap: Bitmap ? = null
23
23
24
+ private var shouldClearBitmap = true
25
+
24
26
fun setImageBitmap (lifecycleOwner : LifecycleOwner , provider : suspend () -> Bitmap ) {
25
27
lifecycleOwner.lifecycle.removeObserver(this )
26
28
lifecycleOwner.lifecycle.addObserver(this )
@@ -36,7 +38,9 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
36
38
}
37
39
withContext(Dispatchers .Main ) {
38
40
if (lastBitmap?.isRecycled == false ) {
41
+ shouldClearBitmap = false
39
42
super .setImageBitmap(lastBitmap)
43
+ shouldClearBitmap = true
40
44
}
41
45
}
42
46
}
@@ -46,26 +50,31 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
46
50
override fun setImageBitmap (bm : Bitmap ? ) {
47
51
imageLoader.cancel()
48
52
super .setImageBitmap(bm)
53
+ tryClear()
49
54
}
50
55
51
56
override fun setImageDrawable (drawable : Drawable ? ) {
52
57
imageLoader.cancel()
53
58
super .setImageDrawable(drawable)
59
+ tryClear()
54
60
}
55
61
56
62
override fun setImageResource (resId : Int ) {
57
63
imageLoader.cancel()
58
64
super .setImageResource(resId)
65
+ tryClear()
59
66
}
60
67
61
68
override fun setImageURI (uri : Uri ? ) {
62
69
imageLoader.cancel()
63
70
super .setImageURI(uri)
71
+ tryClear()
64
72
}
65
73
66
74
override fun setImageIcon (icon : Icon ? ) {
67
75
imageLoader.cancel()
68
76
super .setImageIcon(icon)
77
+ tryClear()
69
78
}
70
79
71
80
override fun onStateChanged (source : LifecycleOwner , event : Lifecycle .Event ) {
@@ -74,4 +83,10 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
74
83
}
75
84
}
76
85
86
+ private fun tryClear (){
87
+ if (shouldClearBitmap) {
88
+ lastBitmap?.recycle()
89
+ }
90
+ }
91
+
77
92
}
0 commit comments