This commit is contained in:
Horis
2025-04-05 14:15:10 +08:00
parent 3ed38fbedc
commit 9e52c5108c
3 changed files with 31 additions and 4 deletions
@@ -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)
}
}
}
@@ -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))
}
}
@@ -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)
}