【问题标题】:Android - best way to handle downloaded image filesAndroid - 处理下载的图像文件的最佳方式
【发布时间】:2014-01-27 06:21:28
【问题描述】:

我正在构建一个应用程序,它可以在地图上显示用户的 FB 朋友的位置,并将他们的个人资料照片作为地图标记图标。

下载朋友的照片后,我将它们存储在一个全局应用程序对象的 ArrayList 中,然后在地图上显示它们。 我意识到我为此花费了大量的堆内存。

我想正确的方法是将它们存储在外部存储中,但我不知道该怎么做。或者也许使用 SQLite 数据库。

所以我的问题是,执行该过程的最有效方法是什么?请记住,当用户的朋友连接到应用时,应用应在地图上实时显示他。

【问题讨论】:

    标签: android image memory-management


    【解决方案1】:

    使用 ArrayList 存储图像不能很好地扩展,更好的方法是使用 Blob 将它们存储在数据库中,如下所述:

    How to save images into Database

    如果您对对象持久性不太满意,另一种方法是将图像保存到文件系统,并将图像的路径名简单地存储在数据库表中,以便您可以在需要时检索它们。

    【讨论】:

    • 欢迎堆栈溢出,摇滚,感谢您的回答。为了将来参考,通常最好在堆栈溢出答案中发布解决方案,而不仅仅是一个链接。这样,如果链接有一天失效,答案仍然有用。谢谢!
    • 感谢您的回复。将它们存储在 HashMap 上的内存使用量是多少?这不是类似于将它们存储在 ArrayList 上吗?我正在寻找一种在不使用大量堆内存的情况下保存和检索这些图像的方法。
    • HashMap 比 ArrayList 具有更高的内存开销,尽管性能差异对于您在此处尝试完成的任务可能可以忽略不计,因此请使用最适合您的那个。请参阅此处:link 如果您只是暂时保存数据,我想这种方法会起作用,但请记住,大量内存使用可能会导致您的进程被操作系统杀死。
    • 好的,假设我已经将所有图像存储在 HashMap 上,我应该将 HashMap 存储在哪里?目前,我将它存储在一个全局对象(在一个应用程序类中)上,我使用它来保持我的所有数据可以从任何所需的活动中访问。可以保留这样的大对象吗?还是我需要将其存储在外部存储中?
    • 您不存储 HashMap 本身,您保留其中包含的每个对象,然后在需要时从数据库中重新实例化。如果您对对象持久性不太满意,另一种方法是将图像保存到文件系统,并将图像的路径名简单地存储在数据库中,以便在需要时检索它们。您当前的方法仅适用于临时对您的图像执行某些操作,但变量是易失的,这意味着如果操作系统需要内存,它将杀死您的应用程序并且您将丢失数据。这能回答你的问题吗?
    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2016-09-08
    • 2012-04-04
    • 2011-07-17
    相关资源
    最近更新 更多