Skip to content
This repository was archived by the owner on Jan 6, 2024. It is now read-only.

Commit 40df0ab

Browse files
committed
Attempt to recycle last bitmap
1 parent ca9c4cc commit 40df0ab

File tree

2 files changed

+12
-16
lines changed

2 files changed

+12
-16
lines changed

image/src/main/java/com/kylecorry/ceres/image/AsyncImageView.kt

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ 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-
2624
fun setImageBitmap(lifecycleOwner: LifecycleOwner, provider: suspend () -> Bitmap) {
2725
lifecycleOwner.lifecycle.removeObserver(this)
2826
lifecycleOwner.lifecycle.addObserver(this)
@@ -38,54 +36,50 @@ class AsyncImageView(context: Context, attrs: AttributeSet?) : AppCompatImageVie
3836
}
3937
withContext(Dispatchers.Main) {
4038
if (lastBitmap?.isRecycled == false) {
41-
shouldClearBitmap = false
4239
super.setImageBitmap(lastBitmap)
43-
shouldClearBitmap = true
4440
}
4541
}
4642
}
4743
}
4844
}
4945

46+
fun recycleLastBitmap(clearView: Boolean = true) {
47+
if (clearView){
48+
setImageDrawable(null)
49+
}
50+
lastBitmap?.recycle()
51+
lastBitmap = null
52+
}
53+
5054
override fun setImageBitmap(bm: Bitmap?) {
5155
imageLoader.cancel()
5256
super.setImageBitmap(bm)
53-
tryClear()
5457
}
5558

5659
override fun setImageDrawable(drawable: Drawable?) {
5760
imageLoader.cancel()
5861
super.setImageDrawable(drawable)
59-
tryClear()
6062
}
6163

6264
override fun setImageResource(resId: Int) {
6365
imageLoader.cancel()
6466
super.setImageResource(resId)
65-
tryClear()
6667
}
6768

6869
override fun setImageURI(uri: Uri?) {
6970
imageLoader.cancel()
7071
super.setImageURI(uri)
71-
tryClear()
7272
}
7373

7474
override fun setImageIcon(icon: Icon?) {
7575
imageLoader.cancel()
7676
super.setImageIcon(icon)
77-
tryClear()
7877
}
7978

8079
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
8180
if (event == Lifecycle.Event.ON_DESTROY) {
8281
imageLoader.cancel()
83-
}
84-
}
85-
86-
private fun tryClear(){
87-
if (shouldClearBitmap) {
88-
lastBitmap?.recycle()
82+
recycleLastBitmap(true)
8983
}
9084
}
9185

list/src/main/java/com/kylecorry/ceres/list/ListItem.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import androidx.core.view.setPadding
1111
import androidx.lifecycle.LifecycleOwner
1212
import com.kylecorry.andromeda.core.system.Resources
1313
import com.kylecorry.andromeda.core.tryOrLog
14-
import com.kylecorry.andromeda.core.tryOrNothing
1514
import com.kylecorry.andromeda.core.ui.Colors
1615
import com.kylecorry.andromeda.core.ui.setCompoundDrawables
1716
import com.kylecorry.ceres.image.AsyncImageView
@@ -61,6 +60,9 @@ data class ResourceListIcon(
6160
override fun apply(image: ImageView) {
6261
image.isVisible = true
6362
image.setImageResource(id)
63+
if (image is AsyncImageView){
64+
image.recycleLastBitmap(false)
65+
}
6466
Colors.setImageColor(image, tint)
6567

6668
image.scaleType = scaleType

0 commit comments

Comments
 (0)