gpt4 book ai didi

android - 在内存有限的情况下,如何优雅地降低性能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:47 24 4
gpt4 key购买 nike

过去几天,我一直在尝试消除游戏中的内存泄漏,这导致了许多内存不足错误。我即将添加大量图形,虽然不是很复杂,但会显着增加我系统的处理要求,我有点担心我的内存使用情况,我希望有人可能有给我一些提示。我不想低于 Android 2.1,所以请为此定制任何答案。

首先,我的游戏包括:

  1. 2 个 Activity ,13 个 XML 文件(一些与布局的一小部分相关,一些对话框,2 个与 Activity 直接相关。
  2. 使用 Adob​​e Illustrator 制作并转换为 PNG 的大量可绘制对象。这些可能很大,但不是特别大,而且在大多数情况下,在任何给定时间,只有少量它们在内存中。
  3. 相当多的对话。
  4. 针对 Android 1.6 及更高版本。
  5. 我使用了最新的 Admob,因此,我必须针对 3.2 进行构建。
  6. 我的模拟器的默认堆大小约为 24 MB。

我的游戏中的一些示例图像:

enter image description here

enter image description here

enter image description here

我学到了什么:

  1. 尽管我的应用程序总大小只有 500K 左右,但根据 adb shell procrank 的计算,我以某种方式占用了 24 Meg。
  2. 我已经做了相当大的优化,但没有看到内存有很大的增加。
  3. 使用工具查找堆中的内容通常只显示大约 7 MB 的可用空间,其中大约 3 MB 已被使用。有时,当打开新对话框等时,我会看到增加,但我不能说我看到它有那么大......
  4. MAT 显示我的所有类(class)都没有使用异常大量的内存。

所以,鉴于所有这些,我的问题。

  1. 24 Mb 是否是开发到 (1.6+ android) 的实际要求?
  2. 假设是这样,我怎样才能既让能够处理它的系统获得更好的图形,又不让旧系统崩溃和烧毁?
  3. 我可以利用哪些常见陷阱来提高内存使用率?

最佳答案

在没有看到您的实际代码的情况下,我无法确定以下内容是否与您相关。但是,值得一试。

如果您还没有这样做,您可以考虑使用一种叫做 LruCache 的东西。 http://developer.android.com/reference/android/util/LruCache.html

使用此工具,您可以确定您的缓存对象(例如位图)在什么时候有资格进行垃圾回收。因此,如果您想将它设置为 4mb(例如),操作系统将在它试图超出它时处理它。 (有关实现细节和一个很好的例子,请参阅文档)。

唯一的缺点是那个小 gem 只随 3.2 一起出现,所以你必须在 AndroidManifest 中制作你的最小 SDK,或者在运行时以编程方式检查 api 级别以确定你是否可以使用它. Pre 3.2 我会说你需要在你正在使用的任何位图上调用 recycle(),但如果你已经优化过,我认为你很有可能已经在这样做了。

这是关于堆内存和 native 内存之间区别的一个很好的小 fragment 。 http://code-gotcha.blogspot.com/2011/09/android-bitmap-heap.html它可能(取决于您在做什么)帮助您理解为什么您没有看到预期的内存下降。

最后,SO 的这篇文章在处理堆大小时也应该有所帮助: Detect application heap size in Android

希望对您有所帮助。

关于android - 在内存有限的情况下,如何优雅地降低性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9986385/

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