【问题标题】:Storing large amount of images android存储大量图像android
【发布时间】:2016-02-04 20:39:53
【问题描述】:

我目前正在创建一个应用程序,它可以容纳数百张图片,确切地说是 445 个 .png 文件,总共 19.7MB。我正在使用回收站视图和卡片视图来显示每个图像。

将所有这些图像存储在可绘制文件夹中是最好的方法吗?此外,如果我确实将它们存储在可绘制文件夹中,这些图像在完成后是否易于人们从应用程序中提取?有一点安全感会很好,因为我在创建图像时付出了很多努力。

【问题讨论】:

  • 提取就像苹果派一样简单。 Apk 只是一个 zip 存档,因此您可以毫无问题地提取其内容。
  • 这样做更安全的方法是什么? @aelimill
  • 这真的取决于这些资产(图像)的种类,它们对用户/应用程序/视图的重要性。将它们保存在外部服务器上也很麻烦,尤其是这样做会消耗用户带宽。如果需要在不同的设备类型上缩放资产,最好将它们放在可绘制文件夹中(20MB 不算多),否则将它们存储在资产文件夹中,存档并以优化的方式访问它。此外,您可以使用像 Picasso 这样的库来加载它们。

标签: android android-drawable android-image


【解决方案1】:

对我来说,答案很明显——最好的方法是将所有需要的图像保存在外部某个地方(在服务器上)。对于加载图像,我建议使用 Picasso - 它非常简单并且具有开箱即用的缓存,您可以根据需要对其进行自定义。只需两个步骤 - 将图像上传到服务器并在需要时请求它们。

【讨论】:

    【解决方案2】:

    对于普通用户来说并不容易,但可以获取这些图像。您应该加密要保护的文件。要在 apk 中内置加密文件,请将其放入 assets 文件夹中。
    要显示RecyclerView 中的所有图像,您可以仅在用户看到它时异步加载它们。如果您显示缩略图,那么只需在用户第一次启动您的程序时或在用户使用它时构建这些图像,然后将这些缩略图全部加载到下次列表中。
    不过,对于 445 张图片,最好异步加载。作为优化,当用户在列表中的某个项目上停止时,您可以加载部分图像。例如:列表显示 5 个项目,然后您的适配器必须加载 1 - 20 个图像,这需要一点内存。

    【讨论】:

    • 您能举个例子说明我如何异步执行此操作吗? @鬼人
    • Example. 只有您需要自己更改背景加载。在您的自定义适配器中使用它之后。只有当ImageView 不可见时,您才需要将侦听器添加到免费图像。
    • 我可以建议您创建单独的类 ImageBuffer 以及加载/释放图像的所有逻辑。你的图片大小一样吗?
    • 都是128x128
    • 然后您可以计算列表中的可见项目数。在您的自定义适配器onBindViewHolder 中,您应该调用ImageBuffer 的方法并将ImageView 和位置发送给它,以便ImageBuffer 可以了解何时释放旧图像并加载当前图像。
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2011-04-05
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多