gpt4 book ai didi

android - 巨大的在线图片库 - 如何避免 OutOfMemoryError?

转载 作者:行者123 更新时间:2023-11-29 22:34:01 24 4
gpt4 key购买 nike

对于任何想知道的人,画廊是 http://www.spore.com/sporepedia .

我的应用程序使用 Spore API 获取 100 个最新创建的内容,然后将它们显示在 GridView 中。关于创作的文本数据易于存储,但图像存在问题。

据我所知,我可以将图像保存在哈希表中,也可以在每次查看图像时抓取它们。这些都不起作用 - Hashtable 很快就会出现 OutOfMemoryError,并且不断的重新加载会导致服务器上的大量负载和客户端上的大量滞后。

有没有更好的方式存储图片?

最佳答案

首先不要一次获得 100 张,您不可能在 gridview 中显示 100 张图像并使它们具有有用的可见尺寸。异步检索图像并一次获取全屏或半屏。我猜你可以在每个屏幕上显示 6 到 9 个大小合适的图像,并支持文本/UI 元素,你甚至可能想根据手机屏幕大小/分辨率选择显示多少。因此,您应该一次获取 9 到 12 张图像。

其次,我不知道这些图像的分辨率是多少,但听起来像是“大”。如果 API 支持,它只会为您的 GridView 接收缩略图版本。如果没有,我可能会做的是:当您从 API 收到图像时,首先创建一个新图像,按比例缩小到进入 GridView 的缩略图所需的大小,并将其保存在内存中。然后创建一个按比例缩小到“详细信息”屏幕(如果有的话)所需大小的新图像并将其缓存到 SD 卡并将其从 ram 以及原始源图像中释放出来,这种缩放可能会发生在一个单独的线程中,以避免它影响您的 UI 线程的响应能力。根据使用模式,我可能还会将缩略图缓存到 SD 卡中,这样释放它们在 onStop/onPause 中使用的 ram 并在 onStart/onResume 中重新加载它们会很便宜。 IT 听起来也像是您在下载“前 100 名”之类的东西。由于我不希望每次使用的应用程序都出现全新的前 100 名,因此您可以通过将图像和信息缓存到 SD 卡并仅在每次程序运行时下载新条目来节省大量网络流量。

或者像这样的过程:

接收图片->原地缩放到细节大小->缓存细节大小->原地缩放细节到缩略图大小->在gridview中显示缩略图,同时异步缓存缩略图

会使用更少的内存,因为内存中只有 1 个图像副本,但它会减慢 gridview 的响应,因为图像在显示之前必须缩放两次。它可能足够快而无关紧要,或者您可以通过在后台生成缩略图时显示大图像(内部缩放)来使用 GridView 玩花样,准备好后将 GridView 切换到缩略图。您只需尝试确定它是否足够快。

关于android - 巨大的在线图片库 - 如何避免 OutOfMemoryError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2889318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com