Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin

这篇具有很好参考价值的文章主要介绍了Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android Glide:如何判断图像资源是否已缓存并使用缓存数据

在Android开发中,我们经常需要加载和显示网络上的图像资源。为了提高用户体验和应用性能,我们通常会将图像资源缓存到本地,这样在下次需要显示相同的图像时,我们可以直接从缓存中读取,而无需再次从网络下载。本文将介绍如何使用Glide库和Kotlin语言来实现这一功能。

首先,我们需要创建一个新的MainActivity类,该类继承自AppCompatActivity。在onCreate方法中,我们找到布局中的ImageView,并设置一个网络图像的URL。然后,我们调用glideOnlyLoadFromCache方法来尝试从缓存中加载图像。

class MainActivity : AppCompatActivity() {
    private val TAG = "MainActivity"
    private val mContext = this

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val imageView = findViewById<ImageView>(R.id.image)
        val imageUrl = "https://profile-avatar.yssmx.com/06993f9ad1b949fb8adffe2fd319515d_zhangphil.jpg"

        val imageSize = 50
        glideOnlyLoadFromCache(imageUrl, imageSize, object : OnCachedListener {
            override fun memCached(o: Any, hasCached: Boolean) {
                if (hasCached) {
                    Log.d(TAG, "找到缓存! ${o}")

                    GlideApp.with(mContext)
                        .asBitmap()
                        .load(url)
                        .centerCrop()
                        .override(size)
                        .into(imageView)
                } else {
                    Log.d(TAG, "没找到缓存! ${o}")
                }
            }
        })
    }
    // 省略其他代码...
}

glideOnlyLoadFromCache方法的作用是只从缓存中加载图像。如果图像已经被缓存,那么就通过OnCachedListener接口回调通知调用者。在这个方法中,我们使用了Glide的onlyRetrieveFromCache方法来指定只从缓存中加载图像。

private fun glideOnlyLoadFromCache(url: String, size: Int, listener: OnCachedListener) {
    GlideApp.with(this)
        .asBitmap()
        .load(url)
        .onlyRetrieveFromCache(true)
        .addListener(object : RequestListener<Bitmap> {
            override fun onLoadFailed(
                e: GlideException?,
                model: Any?,
                target: Target<Bitmap>,
                isFirstResource: Boolean
            ): Boolean {
                Log.d(TAG, "没有缓存 $url")
                listener.memCached(url, false)
                return true
            }

            override fun onResourceReady(
                resource: Bitmap,
                model: Any,
                target: Target<Bitmap>?,
                dataSource: DataSource,
                isFirstResource: Boolean
            ): Boolean {
                Log.d(TAG, "发现缓存 $url")
                listener.memCached(url, true)
                return true
            }
        })
        .centerCrop()
        .override(size)
        .preload()
}

OnCachedListener接口定义了一个memCached方法,该方法用于通知调用者图像是否已经被缓存。

interface OnCachedListener {
    fun memCached(o: Any, hasCached: Boolean)
}

通过上述代码,我们可以实现在Android应用中判断图像资源是否已经被缓存,并从缓存中加载图像的功能。

完整代码示例

Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin

import android.graphics.Bitmap
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target

class MainActivity : AppCompatActivity() {
    private val TAG = "fly"
    private val mContext = this

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val imageView = findViewById<ImageView>(R.id.image)
        val url = "https://profile-avatar.yssmx.com/06993f9ad1b949fb8adffe2fd319515d_zhangphil.jpg"

        val size = 50
        glideOnlyLoadFromCache(url, size, object : OnCachedListener {
            override fun memCached(o: Any, hasCached: Boolean) {
                if (hasCached) {
                    Log.d(TAG, "找到缓存! ${o}")

                    GlideApp.with(mContext)
                        .asBitmap()
                        .load(url)
                        .centerCrop()
                        .override(size)
                        .into(imageView)
                } else {
                    Log.d(TAG, "没找到缓存! ${o}")
                }
            }
        })
    }

    //只从缓存中取图片,如果取到就通过接口回调。
    private fun glideOnlyLoadFromCache(url: String, size: Int, listener: OnCachedListener) {
        val target = GlideApp.with(this)
            .asBitmap()
            .load(url)
            .onlyRetrieveFromCache(true)
            .addListener(object : RequestListener<Bitmap> {
                override fun onLoadFailed(
                    e: GlideException?,
                    model: Any?,
                    target: Target<Bitmap>,
                    isFirstResource: Boolean
                ): Boolean {
                    Log.d(TAG, "没有缓存 $url")
                    listener.memCached(url, false)
                    return true
                }

                override fun onResourceReady(
                    resource: Bitmap,
                    model: Any,
                    target: Target<Bitmap>?,
                    dataSource: DataSource,
                    isFirstResource: Boolean
                ): Boolean {
                    Log.d(TAG, "发现缓存 $url")
                    listener.memCached(url, true)
                    return true
                }
            })
            .centerCrop()
            .override(size)
            .preload()
    }

    interface OnCachedListener {
        fun memCached(o: Any, hasCached: Boolean)
    }
}

 文章来源地址https://www.toymoban.com/news/detail-716160.html

到了这里,关于Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【图像处理】Python判断一张图像是否亮度过低

    比如: 直方图: 代码: 这段代码是一个用于判断图像亮度是否过暗的函数is_dark,并对输入的图像进行可视化直方图展示。 首先,通过import语句导入了cv2和matplotlib.pyplot模块,用于图像处理和可视化。 is_dark函数的作用是判断输入图像的平均亮度是否低于设定的阈值。函数接

    2024年02月16日
    浏览(73)
  • Android,判断是否快速点击

    在Android控件中,如果快速点击容易造成一些不同的bug,尤其是那种在click事件中方有耗时操作的代码,容易引起anr,并且有些性能低的机器,在用户点击多次控件的时候很容易出现问题,在车机中也会导致回弹的一系列问题(这里面包括get到的信号导致回弹),针对于这种情

    2024年04月28日
    浏览(56)
  • Android 判断网络是否可用

    2024年02月12日
    浏览(42)
  • 利用OpenCV判断图像是否过亮或过暗

    在处理图像自动亮度调节时,需要判断图像是否过亮或者过暗,从而根据图像给出的结果,进行调节。方法如下:

    2024年02月15日
    浏览(43)
  • 【图像处理】Python判断一张图像是否亮度过低,图片模糊判定

    比如: 直方图: 代码: 这段代码是一个用于判断图像亮度是否过暗的函数is_dark,并对输入的图像进行可视化直方图展示。 首先,通过import语句导入了cv2和matplotlib.pyplot模块,用于图像处理和可视化。 is_dark函数的作用是判断输入图像的平均亮度是否低于设定的阈值。函数接

    2024年02月16日
    浏览(56)
  • JS一些常用判断(包括判断是否是苹果(ios)/安卓(Android)、是否是Safari浏览器、检测浏览器语言等等)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 参考链接 JS判断客户端是否是iOS或者Android:http://caibaojian.com/browser-ios-or-android.html

    2024年02月04日
    浏览(86)
  • 判断Android 应用是否处于Debug模式的2种方法

    我们有时想在代码中,判断应用是否是调试版本,以此来屏蔽或者做一些特殊处理,例如,1. 打印日志;2. 如果是 Debug 模式下的崩溃信息,我们要特殊标记出来等。 那么如何判断 Debug 模式呢? 最简单的方式: 使用 BuildConfig.DEBUG 可以很方便的判断,当前是 Debug 包还是 Rele

    2024年02月08日
    浏览(49)
  • python-opencv学习笔记(八):判断是否雾天与图像能见度测算

    本篇是最近碰到的一个关于雾天能见度的问题,然后查阅到很多资料,顺便记录一下思考过程,进行总结归类成笔记。主要参考资料是华为杯2020年E题论文,结合一下自己的实际情况,做出了改进与延伸,文献在最后引出。 1. 大气能见度: 能见度是气象、公路行车、飞机飞行

    2024年02月05日
    浏览(39)
  • 如何判断Android的Service是否已启动或已绑定

    此内容基于CharGPT生成 要判断一个 Android Service 是否已经启动或已绑定,可以使用以下方法: 启动状态判断: 可以使用 ActivityManager 类中的 getRunningServices() 方法,该方法返回一个 ListActivityManager.RunningServiceInfo 对象,包含当前正在运行的所有服务的信息。然后可以遍历这个列表

    2024年02月07日
    浏览(49)
  • uniapp 移动端app判断用户app版本是否是最新版(Android)

    1.在uniapp项目中的App.vue文件下 2. 具体实现代码 ios的话自行给提示 去应用商店下载

    2024年01月20日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包