Horis há 1 ano atrás
pai
commit
9e52c5108c

+ 25 - 0
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)
+        }
+    }
+
+}

+ 5 - 0
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))
     }
 }

+ 1 - 4
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<ViewGroup.LayoutParams> {
                     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)
                 }