Android GlideApp decode file resource shared by different processes,Kotlin
import android.content.Context
import android.os.Environment
import android.util.Log
import com.bumptech.glide.GlideBuilder
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.load.engine.cache.DiskLruCacheFactory
import com.bumptech.glide.module.AppGlideModule
import java.io.File@GlideModule
class MyGlideModule : AppGlideModule() {override fun applyOptions(ctx: Context, builder: GlideBuilder) {super.applyOptions(ctx, builder)builder.setLogLevel(Log.DEBUG)val diskCacheFolder = Environment.getExternalStorageDirectory()val diskCacheName = "fly_disk_cache" //实际场景在前面加一个 . 变成这样 .fly_disk_cache ,对用户隐藏缓存目录。val diskCacheSize: Long = 1024 * 1024 * 2048Lval cacheFolder = File(diskCacheFolder, diskCacheName)if (cacheFolder.exists()) {Log.d("fly", "${cacheFolder.absolutePath} exists")} else {if (cacheFolder.mkdir()) {Log.d("fly", "${cacheFolder.absolutePath} create OK")}}val diskLruCacheFactory = DiskLruCacheFactory(diskCacheFolder.absolutePath, diskCacheName, diskCacheSize)builder.setDiskCache(diskLruCacheFactory)}override fun isManifestParsingEnabled(): Boolean {return false}
}
import android.content.Context
import android.os.Bundle
import android.provider.MediaStore
import android.text.TextUtils
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.text.SimpleDateFormatclass MainActivity : AppCompatActivity() {companion object {const val SIZE = 400}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val ctx = applicationContextlifecycleScope.launch(Dispatchers.IO) {val lists = readAllImage(this@MainActivity)lists.forEach {GlideApp.with(ctx).load(it.path).fitCenter().override(SIZE).submit(SIZE, SIZE).get()}}}private fun readAllImage(context: Context): ArrayList<MyData> {val photos = ArrayList<MyData>()//读取所有图val cursor = context.contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null)var index = 0val sdf = SimpleDateFormat("yyyy-MM-dd")while (cursor!!.moveToNext()) {//路径 urival path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA))if (TextUtils.isEmpty(path)) {continue}val dateModified = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATE_MODIFIED))//图片名称//val name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME))//图片大小//val size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE))val dateStr = sdf.format(dateModified?.toLong()!! * 1000)val data = MyData()data.path = pathdata.dateModified = dateModified.toLong()data.dateString = dateStrdata.index = index++photos.add(data)}cursor.close()return photos}class MyData {var dateModified: Long? = 0Lvar dateString: String? = nullvar path: String? = nullvar index: Int? = null}
}
依赖问题:目标是把设备上的全部图资源先解码放好,备着后续使用,但由于Glide的加载器启动一个decode任务依赖activity的生命周期,当把activity切入后台后,之前启动的任务加载完后,就暂停了。理想的情况是让Glide在后台一直静默decode原始图文件,不依赖/不去感知activity的生命周期变化。因为有的场景只是在后台起了一个service,没有前台界面,静默decode图。
Android Glide预处理preload原始图片到成品resource & 预加载RecyclerViewPreloader,Kotlin_android glide preload-CSDN博客文章浏览阅读1k次。【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。《Android图片加载与缓存开源框架:Android Glide》Android Glide是一个开源的图片加载和缓存处理的第三方框架。_android glide preloadhttps://blog.csdn.net/zhangphil/article/details/132000010https://blog.csdn.net/zhangphil/article/details/132000010