【问题标题】:Android Best approach when handling a lot of imagesAndroid 处理大量图像时的最佳方法
【发布时间】:2013-11-08 17:22:53
【问题描述】:

最近我开始研究移动开发。我从 Android 原生开始,因为它可能是应用程序发布到的第一个移动操作系统,但是在学习一门新语言并尝试适应新的 IDE 和 API 之后,我切换到了 PhoneGap,因为它始终计划将应用程序安装在多个操作系统上。此外,我有多年的网络开发经验。

所以现在我面临的问题是如何存储所有这些图像,因为我的应用程序将处理大量图像。 我对可以做什么有几个想法:

  1. 拥有某种托管图像的云存储,然后当应用程序运行时,它会将所有图像下载到设备上,但这会占用设备上的大量存储空间,并且可能需要很长时间.

  2. 云存储,但是当应用程序运行时,它会将它们下载到缓存中以仅使用当前需要的那些,然后在用户完成它们后丢弃它们,甚至可能尝试只下载一个需要。

就性能和设备存储而言,第二种方法对我来说最有意义,但它会强制应用程序始终在线。在第一个示例中,这不是必需的。我不禁想到有更好的方法来解决这个问题。

还有什么是本地化的最佳途径,这意味着对原生 API 的更严格控制,但失去了通用性的功能,并且必须为每种语言的不同操作系统分别或以某种方式做同样的事情以某种方式在混合环境中?

【问题讨论】:

    标签: android performance cordova


    【解决方案1】:

    我的应用程序执行与此类似的操作,但我们全部使用 Java 执行,因此如果您决定返回该路线,这可能会有所帮助。我们在云中托管了大量图像(超过 30,000 张)。用户可以浏览这些图片(我们预先生成了每张图片的缩略图),在客户端我们有以下内容:

    1. 占位符图像是ImageView 的子类,它还处理执行下载图像的异步任务。
    2. 图像的内存缓存使用 Android 的 LRUCache 类。缓存在启动时被初始化为可用内存的 1/8 左右。
    3. DiskLRU 缓存用于将图像存储在手机的 SD 卡上。我目前正在使用Jake Wharton's DiskLRUCache

    这做得不错,但您还需要查看 Google 的 Managing Bitmaps 文章,并了解如果您在 Gingerbread 或更早版本上运行,您将如何回收位图。

    哦,我差点忘了,你可能还想看看Picasso

    【讨论】:

    • 所以基本上你的应用需要一直在线,对吧?您是否限制缓存的数量?
    • 是的,我们的应用是关于照片分享的,所以我们的应用不在线没有任何意义。磁盘缓存的硬上限为 40 MB,但如果空间不足,则会更小。
    • 我还有一个问题,如果我可以问的话,你们在哪里托管您的照片?
    • 他们在亚马逊的 S3 服务上。
    【解决方案2】:

    Phonegap/cordova 应用只是在 web 视图中具有大部分功能的原生应用,因此您可以利用 picasso 代码(通过原生插件)并使用 phonegap。

    也就是说,我可能会做 Carl 所做的事情,但是为 PhoneGap 编写一个插件,为每个平台调用不同的本地代码。

    既然您知道该应用将是跨平台的,那么试用 PhoneGap 看看它是否可以表现得足够好是有意义的。

    你也可以看看在 js 中做缓存,利用这里的一些想法:https://github.com/bperin/imageCache

    【讨论】:

    • 虽然我喜欢你的两个答案,但我不得不选择一个,所以我选择了 Carls 的答案:)
    • 不用担心。请告诉我们你最终做了什么。
    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多