在 Android 中缓存文件的最佳实践

2024-01-30

我目前的应用程序将图像文件缓存在cache应用程序的子目录。这些图像用于ListView并存储在HashMap of SoftReferences to Bitmaps.

所以我的问题是,缓存这些图像文件的最佳方法是什么,而不增加我的应用程序使用的空间,并且从用户的角度保持响应。

我关心的事情:

我知道用户可以清除缓存,并且当内部存储器空间不足时,它会自动完成,但我觉得大多数用户会看到几个 MB 的应用程序并将其卸载。此外,如果空间持续不足,我的应用程序将继续下载图像,使其显得更慢。

大多数设备都预装了SD卡,但是如果没有插入SD卡怎么办?与内部存储相比,SD 卡也可能速度较慢,从而影响我的应用程序的性能。

我应该包含一个选择缓存位置的选项吗?

我应该尝试管理缓存的大小(无论是在 /cache 还是 /sdcard 中)还是干脆忘记它?

感谢您抽出宝贵时间(我知道这个时间很长),请发布任何相关经验。


我无法为您提供一套全面的最佳实践,但我可以提供我迄今为止学到的知识:

管理缓存是个好主意。我的应用程序的缓存是这样的,我知道我永远不会需要超过一定数量的缓存文件,因此每当我将新文件插入缓存时,我都会删除最旧的文件,直到低于我设置的限制。您可以根据体型或简单的年龄做类似的事情。

如果您的缓存需要占用大量空间,则缓存到 SD 卡(如果可用)是一个好主意。您需要同样仔细地管理该空间,因为它不会自动为您清理该空间。如果您要缓存图像文件,请务必将它们放在以点开头的目录中,例如“/yourAppHere/.cache”。这将使图像无法显示在图库中,这确实很烦人。

让用户选择缓存的位置对我来说似乎有点矫枉过正,但如果您的受众非常极客,那么可能会很感激。

我没有注意到缓存到 SD 时有太大的损失,但我不知道您的应用程序如何使用该信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 中缓存文件的最佳实践 的相关文章

随机推荐

  • Angular - 顺序进行多个 HTTP 调用

    我需要创建一个函数来顺序进行 HTTP 调用 以便使用一个调用的响应到另一个调用 例如从第一次调用中获取用户的 IP 地址 并使用该 IP 在第二次调用中注册用户 演示代码 registerUser user User this utili
  • 如何配置 Sublime Text 在保存时始终转换为 Unix 行结尾?

    我希望我在 Sublime Text 中保存的所有文件都采用 Unix 行结束格式 即使我打开最初以不同格式保存但后来在 Sublime Text 中编辑的文件也是如此 简单设定 default line ending unix 还不够 因
  • Django INSTALLED_APPS 'polls' 与 'polls.apps.PollsConfig'

    在每个 YouTube 教程中 我都看到人们只是将 app name 添加到 INSTALLED APPS 列表中 昨天我开始了官方 Django 教程 他们建议使用 app name apps App nameConf 符号 我猜官方方法
  • 理解java的同步集合

    我正在阅读java官方doc https docs oracle com javase tutorial collections implementations wrapper html关于包装器实现 它们是静态方法收藏用于获取同步集合 例
  • 数字签名时间戳在 XP/Vista 上“不可用”,导致验证失败

    背景 我有一个 WiX Burn 安装包 其中包括安装 ReportViewer 2012 Runtime 在 Windows 7 或更高版本的计算机上运行时 它工作正常 在 XP SP3 或 Vista SP1 上它会失败 现在 检查Re
  • 使用mysqldump将表数据导出到csv文件

    我想使用 mysqldump 将表数据导出到 csv 文件中 我想做一些类似的东西 mysqldump compact no create info tab testing fields enclosed by fields termina
  • JBoss 4.2.2 Web服务soap:地址

    我在 JBoss 4 2 2 中部署了一个 EJB3 bean 作为 Web 服务 在生产中 服务器位于 Apache 服务器后面 该服务器将请求重定向到 Jboss 服务器 这使得 WSDL 具有错误的soap address 位置 我能
  • 将按钮添加到 PreferenceScreen

    我不知道如何在PreferenceScreen 向上按钮会在应用程序图标旁边的操作栏中显示插入符号 使您可以导航应用程序的层次结构 更多信息here http developer android com training implement
  • 查找 CSV 文件中的重复项总数

    我正在解析 CSV 文件 需要您的帮助 我的 CSV 文件中有重复项 我想告诉Python向我提供重复地址的总数和唯一地址的总数 然后列出它们 我已经成功到达地址显示它是唯一还是重复的部分 但现在我想告诉 Python 也为我提供受尊重的数
  • 查看和设置 Safari/Chrome 的 HTTP 标头

    我正在测试一个 API 我想用 safari 来访问它并查看返回的原始 json API 要求每个请求都发送特定的 HTTP 标头 Safari 或 Chrome 中有没有办法在访问 URL 时设置我的 http 标头 有几个 Google
  • 如何在 Pytorch 中可视化网络?

    import torch import torch nn as nn import torch optim as optim import torch utils data as data import torchvision models
  • 历史推送后,反应路由器不会重新渲染

    我希望在用户登录后重新渲染 刷新 所以我使用history push要做到这一点 import history from layout Navbar export const loginUser userData gt dispatch g
  • 如何在 JavaScript 中有效地将预定义大小的大块分割成较小的块,这些块是其大小的因素?

    假设我们有这样的结构 16 bins let BIN OF BINS 128 bits each chunk 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 52428
  • MATLAB 将多个图形保存到 PDF

    有什么办法可以做到这一点吗 我知道如何使用 saveas saveas 1 filename pdf 将一个图形保存到 PDF 文件中 但是否可以添加多个图形 所以像 saveas 1 2 3 filename pdf Thanks 我不这
  • 每 3 条记录后新建包含 div

    我想创建一个新的包含 div 3 个结果后 使用 PDO 结果循环 对于我的自学项目 我必须使用引导程序制作一个产品页面 并且在每第三条记录之后 我必须制作一个新行并再次显示 3 col md 4 等等 现在我将其作为我的代码 div cl
  • 如何获取 char 的 unicode 值?

    我想获得汉字的 Unicode 值 它可能看起来像let values u16 f 当我使用 as bytes I got 227 129 174 当我使用 escape unicode I got u306e the 0x306e这正是我
  • PHP 的 unlink 函数可以与路径一起使用吗?

    我想从 PHP 中的文件夹中删除文件 但我只有该文件的路径 是否可以提供取消链接的路径 例如 unlink path to file txt 如果这不起作用 删除这些文件的唯一方法是在 path to 目录中创建一个 php 文件 并将其以
  • 改变架构生成器中的列长度?

    我有两个字段需要增加字符限制 我通读了文档 令我惊讶的是我没有找到它的选项 可以做吗 如果不是 我应该如何解决这个问题 我可以删除该列并使用正确的属性重新创建它 但我不想丢失数据库中的任何数据 对于 Laravel 4 DB update
  • mysql、准备好的语句和自动类型转换

    我使用常规语句和准备好的语句执行完全相同的查询时得到不同的结果 我认为这是一个类型转换错误 mysql gt show columns from server where field vlan Field Type Null Key Def
  • 在 Android 中缓存文件的最佳实践

    我目前的应用程序将图像文件缓存在cache应用程序的子目录 这些图像用于ListView并存储在HashMap of SoftReferences to Bitmaps 所以我的问题是 缓存这些图像文件的最佳方法是什么 而不增加我的应用程序