From 9e52c5108cea2961c89a43126af725112a17a3fc Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sat, 5 Apr 2025 14:15:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/help/glide/AsyncRecycleBitmapPool.kt | 25 +++++++++++++++++++ .../app/help/glide/LegadoGlideModule.kt | 5 ++++ .../book/manga/recyclerview/MangaAdapter.kt | 5 +--- 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/io/legado/app/help/glide/AsyncRecycleBitmapPool.kt diff --git a/app/src/main/java/io/legado/app/help/glide/AsyncRecycleBitmapPool.kt b/app/src/main/java/io/legado/app/help/glide/AsyncRecycleBitmapPool.kt new file mode 100644 index 000000000..ebad97b64 --- /dev/null +++ b/app/src/main/java/io/legado/app/help/glide/AsyncRecycleBitmapPool.kt @@ -0,0 +1,25 @@ +package io.legado.app.help.glide + +import android.graphics.Bitmap +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPoolAdapter +import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool +import io.legado.app.help.globalExecutor + +class AsyncRecycleBitmapPool(private val delegate: BitmapPool) : BitmapPool by delegate { + + constructor(maxSize: Int) : this( + if (maxSize > 0) { + LruBitmapPool(maxSize.toLong()) + } else { + BitmapPoolAdapter() + } + ) + + override fun put(bitmap: Bitmap) { + globalExecutor.execute { + delegate.put(bitmap) + } + } + +} diff --git a/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt b/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt index d35a121df..5f0f19216 100644 --- a/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt +++ b/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt @@ -6,6 +6,7 @@ import com.bumptech.glide.GlideBuilder import com.bumptech.glide.Registry import com.bumptech.glide.annotation.GlideModule import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory +import com.bumptech.glide.load.engine.cache.MemorySizeCalculator import com.bumptech.glide.load.model.GlideUrl import com.bumptech.glide.module.AppGlideModule import java.io.InputStream @@ -30,6 +31,10 @@ class LegadoGlideModule : AppGlideModule() { override fun applyOptions(context: Context, builder: GlideBuilder) { super.applyOptions(context, builder) + val calculator = MemorySizeCalculator.Builder(context).build() + val bitmapPool = AsyncRecycleBitmapPool(calculator.bitmapPoolSize) + builder.setMemorySizeCalculator(calculator) + builder.setBitmapPool(bitmapPool) builder.setDiskCache(InternalCacheDiskCacheFactory(context, 1024 * 1024 * 1000)) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt index e682d38a1..72641a48d 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt @@ -21,7 +21,6 @@ import io.legado.app.base.adapter.RecyclerAdapter.Companion.TYPE_FOOTER_VIEW import io.legado.app.databinding.BookComicLoadingRvBinding import io.legado.app.databinding.BookComicRvBinding import io.legado.app.help.glide.progress.ProgressManager -import io.legado.app.help.globalExecutor import io.legado.app.model.BookCover import io.legado.app.model.ReadManga import io.legado.app.ui.book.manga.config.MangaColorFilterConfig @@ -169,9 +168,7 @@ class MangaAdapter(private val context: Context) : vh.itemView.updateLayoutParams { height = MATCH_PARENT } - globalExecutor.execute { - Glide.with(context).clear(vh.binding.image) - } + Glide.with(context).clear(vh.binding.image) if (vh.binding.image.tag is String) { ProgressManager.removeListener(vh.binding.image.tag as String) }