gpt4 book ai didi

java - 如何减少多个 Activity 的内存分配

转载 作者:行者123 更新时间:2023-12-02 04:00:15 26 4
gpt4 key购买 nike

假设我有一个关于电影/ Actor 的应用程序。有一个包含电影(或 Actor )详细信息的 Activity ,在此 Activity 中我有带有 3 个 fragment 的 viewpager:ABC。每个 fragment 都有我使用 Picasso 和 Ion 从互联网下载的图像。

我正在使用位图,执行转换,将它们调整为 ImageView 的大小,这样它们就不会使用太多内存。但我不会将它们保存在任何地方,我不需要保存它们。

每个 fragment 中有大量图像(我使用回收器gridview)。 fragment B 和 C 具有包含电影或 Actor 的 GridView ,其中单击项目将打开新的详细信息 Activity ,其中包含相同的 fragment 和新的项目列表。因此,每次单击 GridView 中的项目时,我都可以真正深入地打开新 Activity 。

结果,我迟早会达到 OOM,具体取决于 RAM 设备的数量。 (我无法在具有 2GB 内存的真实手机上重现此情况,但 512mb 应用程序在第 5 或第 6 个打开的 Activity 时崩溃)。

每次 Activity 打开时分配的内存量都会增加。只有当我返回到之前的值时它才会减少。

所以问题是:我应该做什么来减少内存使用?我应该重用已经存在的 Activity 吗?我不知道如何管理回到以前的电影。是的,一切皆有可能,但我不想让它变得更加复杂或缓慢。

我已尝试完成之前的 Activity 。或者在 onStop 方法中删除和回收每个 ImageView 中的位图。这两种方式都不好,因为我必须以某种方式返回并查看数据和图像。并且不要每次都重新下载它们。

我希望你们能给我一个想法,伙计们。由于我是 java 和 android 开发新手,我可能遗漏了一些东西。

最佳答案

使用缓存。创建一个固定大小的LRUCache,并将所有图像放入缓存中。当您需要显示图像时,请检查它是否在缓存中,如果没有,请从互联网上下载。使用此解决方案,您将永远不会使用超过图像缓存大小的内容。

如果需要,可以考虑2级(内存/磁盘)缓存。下载图像后,将其保存到磁盘。如上所述使用 LRUCache。当图像不在缓存中时,检查它是否在磁盘上,如果在磁盘上,则从那里读取(并将其放入内存缓存中)。如果它不在磁盘上,请从互联网上获取它。

关于java - 如何减少多个 Activity 的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005296/

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