From 436099ca04cc49cbd5c41a5e89fbe4f53f12c117 Mon Sep 17 00:00:00 2001 From: Colin White Date: Sat, 17 Sep 2022 19:37:04 -0700 Subject: [PATCH 1/2] Ensure RealImageLoader is fully initialized before registering system callbacks. --- .../androidTest/java/coil/util/SystemCallbacksTest.kt | 5 +++-- coil-base/src/main/java/coil/RealImageLoader.kt | 9 ++++++--- coil-base/src/main/java/coil/util/SystemCallbacks.kt | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/coil-base/src/androidTest/java/coil/util/SystemCallbacksTest.kt b/coil-base/src/androidTest/java/coil/util/SystemCallbacksTest.kt index 4d8a92b9f8..d9345c0011 100644 --- a/coil-base/src/androidTest/java/coil/util/SystemCallbacksTest.kt +++ b/coil-base/src/androidTest/java/coil/util/SystemCallbacksTest.kt @@ -13,6 +13,7 @@ import coil.memory.MemoryCache.Key import coil.memory.MemoryCache.Value import org.junit.Before import org.junit.Test +import kotlin.test.assertEquals import kotlin.test.assertTrue class SystemCallbacksTest { @@ -56,10 +57,10 @@ class SystemCallbacksTest { memoryCache[Key("1")] = Value(createBitmap(1000, 1000, Bitmap.Config.ARGB_8888)) memoryCache[Key("2")] = Value(createBitmap(1000, 1000, Bitmap.Config.ARGB_8888)) - assertTrue(memoryCache.size == 8000000) + assertEquals(8_000_000, memoryCache.size) systemCallbacks.onTrimMemory(TRIM_MEMORY_COMPLETE) - assertTrue(memoryCache.size == 0) + assertEquals(0, memoryCache.size) } } diff --git a/coil-base/src/main/java/coil/RealImageLoader.kt b/coil-base/src/main/java/coil/RealImageLoader.kt index 4ad853b550..bc1e87e797 100644 --- a/coil-base/src/main/java/coil/RealImageLoader.kt +++ b/coil-base/src/main/java/coil/RealImageLoader.kt @@ -112,6 +112,11 @@ internal class RealImageLoader( EngineInterceptor(this, requestService, logger) private val isShutdown = AtomicBoolean(false) + init { + // The image loader must be fully initialized before registering the component callbacks. + systemCallbacks.register() + } + override fun enqueue(request: ImageRequest): Disposable { // Start executing the request on the main thread. val job = scope.async { @@ -213,9 +218,7 @@ internal class RealImageLoader( @Suppress("SAFE_CALL_WILL_CHANGE_NULLABILITY", "UNNECESSARY_SAFE_CALL") internal fun onTrimMemory(level: Int) { // https://github.com/coil-kt/coil/issues/1443 - try { - memoryCacheLazy?.value?.trimMemory(level) - } catch (_: NullPointerException) {} + memoryCacheLazy?.value?.trimMemory(level) } override fun shutdown() { diff --git a/coil-base/src/main/java/coil/util/SystemCallbacks.kt b/coil-base/src/main/java/coil/util/SystemCallbacks.kt index 2bed7b37b2..fadbff8d56 100644 --- a/coil-base/src/main/java/coil/util/SystemCallbacks.kt +++ b/coil-base/src/main/java/coil/util/SystemCallbacks.kt @@ -39,7 +39,7 @@ internal class SystemCallbacks( val isOnline get() = _isOnline val isShutdown get() = _isShutdown.get() - init { + fun register() { context.registerComponentCallbacks(this) } From 7efa1a952c769b56123551b6a7bd53fc9c1ce1bd Mon Sep 17 00:00:00 2001 From: Colin White Date: Sat, 17 Sep 2022 19:46:08 -0700 Subject: [PATCH 2/2] Docs. --- coil-base/src/main/java/coil/RealImageLoader.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coil-base/src/main/java/coil/RealImageLoader.kt b/coil-base/src/main/java/coil/RealImageLoader.kt index bc1e87e797..28fcfd824d 100644 --- a/coil-base/src/main/java/coil/RealImageLoader.kt +++ b/coil-base/src/main/java/coil/RealImageLoader.kt @@ -113,7 +113,7 @@ internal class RealImageLoader( private val isShutdown = AtomicBoolean(false) init { - // The image loader must be fully initialized before registering the component callbacks. + // Must be called only after the image loader is fully initialized. systemCallbacks.register() }