您好,我的 Android 应用程序在我的 Lenovo a319 设备上运行良好,在该设备上它同时在 Galaxy s5 设备上消耗 40 MB RAM,对于相同的构建 (apk) 消耗 300 Mb。而且我收到很多错误,例如 Galaxy s5 设备上的内存问题。
例如
Out of memory
异常和
android.view.InflateException: Binary XML file line
错误。我找到了这个 Question 回答高像素分辨率会导致内存异常,我无法从该问题提供的答案中得到任何线索,请提供相同的支持?
编辑: 感谢您的回答,但它们不准确我重用回收位图并将它们设为空,甚至调用 system.gc();而且我的内存力是恒定的,我只是不明白为什么在 sumasung galxy s5 上需要 300 MB 的 ram 而在我的 lenovo 上只需要 40 MB。我的 lenovo 是 hdpi s5 如果我确定是 xxhdpi。
最佳答案
看起来您的应用是使用 xml 文件中定义的布局构建的。这些布局使用图像作为背景图像或用于 ImageButton
或 ImageView
等的源图像。您的所有可绘制对象通常存储在 drawable-DENSITY
文件夹中。因此,您需要降低所有可绘制对象的分辨率以节省一些 RAM。就像如果你有一些用于 ImageView
的可绘制对象,我们将其命名为 new_image.jpg 并将其放入 drawable-hdpi
中,其分辨率为 800x600 像素,尝试将其调整为 400x300 像素(你可以为此使用 Farstone Image Viewer)。对项目中的每个可绘制对象执行此操作,看看会发生什么。
也可能是您在 ListViews
中使用一些 ImageLoader 显示图像,例如 Glide(推荐)或 UIL 或 Picasso 或任何用途。此类加载器通常会消耗大量 RAM(但可配置)以满足缓存需求,因此 AOS 有时无法加载、构建和表示您使用图像的布局。
另外我推荐你to lern how to display Bitmaps efficiently你必须知道这些事情。
关于android - 我的 Android 应用存在内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29490510/