使用 Android lrucache 的示例

2024-01-01

我需要帮助了解 androids LruCache。我想用来将图像加载到我的网格视图中,以便更好地加载/滚动。有人可以发布使用 LruCache 的示例代码吗?提前致谢。


下面是我为使用 LruCache 制作的一个类,这是基于演示的事半功倍:做一名优秀的 Android 公民在 Google I/O 2012 上给出 http://youtu.be/gbQb1PVjfqM.

观看这部电影以了解有关我在做什么的更多信息TCImageLoader class:

public class TCImageLoader implements ComponentCallbacks2 {
    private TCLruCache cache;

    public TCImageLoader(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(
            Context.ACTIVITY_SERVICE);
        int maxKb = am.getMemoryClass() * 1024;
        int limitKb = maxKb / 8; // 1/8th of total ram
        cache = new TCLruCache(limitKb);
    }

    public void display(String url, ImageView imageview, int defaultresource) {
        imageview.setImageResource(defaultresource);
        Bitmap image = cache.get(url);
        if (image != null) {
            imageview.setImageBitmap(image);
        }
        else {
            new SetImageTask(imageview).execute(url);
        }
    }

    private class TCLruCache extends LruCache<String, Bitmap> {

        public TCLruCache(int maxSize) {
            super(maxSize);
        }

        @Override
        protected int sizeOf(ImagePoolKey key, Bitmap value) {
            int kbOfBitmap = value.getByteCount() / 1024;
            return kbOfBitmap;
        }
    }

    private class SetImageTask extends AsyncTask<String, Void, Integer> {
        private ImageView imageview;
        private Bitmap bmp;

        public SetImageTask(ImageView imageview) {
            this.imageview = imageview;
        }

        @Override
        protected Integer doInBackground(String... params) {
            String url = params[0];
            try {
                bmp = getBitmapFromURL(url);
                if (bmp != null) {
                    cache.put(url, bmp);
                }
                else {
                    return 0;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return 0;
            }
            return 1;
        }

        @Override
        protected void onPostExecute(Integer result) {
            if (result == 1) {
                imageview.setImageBitmap(bmp);
            }
            super.onPostExecute(result);
        }

        private Bitmap getBitmapFromURL(String src) {
            try {
                URL url = new URL(src);
                HttpURLConnection connection
                    = (HttpURLConnection) url.openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                Bitmap myBitmap = BitmapFactory.decodeStream(input);
                return myBitmap;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }

    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
    }

    @Override
    public void onLowMemory() {
    }

    @Override
    public void onTrimMemory(int level) {
        if (level >= TRIM_MEMORY_MODERATE) {
            cache.evictAll();
        }
        else if (level >= TRIM_MEMORY_BACKGROUND) {
            cache.trimToSize(cache.size() / 2);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Android lrucache 的示例 的相关文章

随机推荐

  • PHP md5 解释

    我正在开发这个 PHP 项目 并且有很多地方使用了 md5 我什至已经使用过它很多次了 但直到今天我仍然不清楚这个功能是做什么的 我意识到它会解密传入的值 但是如何撤消它以使其恢复到原始值 也许我不清楚整个过程 如果有人有有关该过程的信息
  • 如何使用 Iphone 应用程序获取设备令牌以及有关设备的其他信息?

    在我的 iPhone 应用程序中 我想要使用 APN 的设备令牌 如何使用代码获得它 另外 我想要有关设备用户 其版本和其他信息的其他信息 如何使用代码获得它 是否可以使用Device Token获取设备的其他信息 设备令牌的格式是什么 请
  • 在 UIViewController 的主视图中加载自定义 UIView

    我对 UIView 进行了子类化并创建了一个 NIB 来控制应用程序的主要逻辑 希望视图能够很好地缩放 我想将它用于该应用程序的 iPhone 和 iPad 版本 在 iPhone 上 视图将覆盖全屏 在 iPad 上 视图将仅覆盖屏幕的一
  • 用于验证的 OO 设计模式

    我正在根据这些假设编写一些验证代码 Validation code must be in an external class 即没有数据类包含它自己的验证 The same object can be validated in differ
  • group by 中的 group by 和average

    我有一个像这样的数据框 cluster org time 1 a 8 1 a 6 2 h 34 1 c 23 2 d 74 3 w 6 我想计算每个集群每个组织的平均时间 预期结果 cluster mean time 1 15 8 6 2
  • WCF:远程服务器返回错误:(413)请求实体太大[重复]

    这个问题在这里已经有答案了 我有一个wcf服务 有一种方法可以获取base64字符串来上传文件我的文件大小为100kb 随着时间的推移它可能会更大 我收到错误消息 远程服务器返回错误 413 请求实体太大 同时尝试获取 HttpWebRes
  • 使用 ifelse 从 R 数据集中删除不需要的行

    我有一个数据集 我想删除我的几个人在第一个观察年中第 11 个月出现的情况 是否可以用 if else 来做到这一点 就像是 ifelse ID 1 Month 11 and Year 2006 remove these rows ifel
  • OS X Lion 上的 Eclipse Indigo 输入延迟

    我正在做一个相当大的项目 最近遇到了我的 90 年代的好老朋友 打字滞后 我的设置是配备 SSD 驱动器的 MacBook Pro 2 2 GHz i7 8GB 到目前为止还没有出现任何严重的性能问题 我已将内存分配增加到 Xmx1024m
  • Bootstrap,对布局进行响应式更改

    我在设计中使用了流畅的 Twitter Bootstrap 布局 并将使其具有响应能力 考虑这样的网格 div class row fluid div class span4 div div class span8 div div 隐藏 s
  • firebase 库实现出现 Appcompat 错误

    您好 我有一个关于添加 firebase 依赖项的小问题 当我添加这一行时 implementation com google firebase firebase core 17 0 0 在我的 build gradle 中 我看到一条错误
  • 如何在 Windows Phone 8.1 中添加 AppBar

    在Windows Phone 8中 添加应用程序栏并管理它非常容易 但现在我测试新的Windows Phone 8 1 SDK来构建具有新地理围栏功能的项目 但我不知道如何在应用程序中添加应用程序栏 在Windows Phone 8 1中
  • 如何使用另一个测试结果中的标签来标记 ggplot 中的条形图?

    我想用测试的标签输出来标记我的图 例如 使用 agricolae 库中的 LSD test 进行 LSD 测试输出 a b ab 等 这是运行的示例 library ggplot2 library agricolae wt lt gl 3
  • 根据用户选择将 MYSQL 表中的数据输出为 HTML 表单

    我有一个 MYSQL 表 roomcost 用于保存租用房间的成本 costID Room Cost 1 room1 15 2 room2 30 3 room3 50 rsRoomCost SQL 是 SELECT FROM roomcos
  • 通过反射和使用 Class.cast() 进行投射[重复]

    这个问题在这里已经有答案了 可能的重复 Java Class cast 与强制转换运算符 https stackoverflow com questions 1555326 java class cast vs cast operator
  • 删除 jgit 未按预期工作的分支

    我正在尝试使用 jgit 删除我的存储库中的一个分支 DeleteBranchCommand command git branchDelete command setBranchNames myBranch command setForce
  • 如何获取网页上任意指定像素的颜色? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我最初的搜索表明 出于安全原因 我可能无法执行此操作 但无论如何我都会询问 我怎样才能得到的颜色any网页上的指定像素 更具体地说 这是我自
  • 使用访问令牌下载 bitBucket 私有存储库的 powershell 脚本

    我试图通过首先从 bitbucket 获取代码来自动化构建过程 如下所示 output E FileName xyz url https bitbucket org WhatEver WhatEverBranchName get maste
  • 如何在 HTML 中创建小空间?

    有长破折号和短破折号 是否有一个 en 相当于 有没有一个en相当于纯Ascii 32 我想要一个更好的方式来写这个 123 span class spanen nbsp span 456 span class spanen nbsp sp
  • 从 CGI C 模块返回 http 错误代码

    我有一个用 C 编写的 CGI 模块 在某些情况下我想从该模块返回 HTTP 错误 400 问题是 我不知道如何从模块返回 HTTP 错误 看起来像我的模块中的 return 1 返回 500 内部服务器错误 我尝试过退回 400 等 但还
  • 使用 Android lrucache 的示例

    我需要帮助了解 androids LruCache 我想用来将图像加载到我的网格视图中 以便更好地加载 滚动 有人可以发布使用 LruCache 的示例代码吗 提前致谢 下面是我为使用 LruCache 制作的一个类 这是基于演示的事半功倍