【问题标题】:Memory issue with my Android app我的 Android 应用程序的内存问题
【发布时间】:2015-04-07 11:28:43
【问题描述】:

您好,我的 Android 应用程序在我的 Lenovo a319 设备上运行良好,在此设备上它消耗 40 MB 的 RAM,而在 Galaxy s5 设备上,它消耗 300 Mb 的相同构建(apk)。而且我遇到了很多错误,例如 Galaxy s5 设备上的内存问题。

举例

内存不足

异常和

android.view.InflateException: 二进制 XML 文件行

错误。我发现这个Question 回答说高像素分辨率会导致内存异常,我无法从该问题中提供的答案中得到任何线索,请提供同样的支持吗?

编辑: 感谢您的回答,但它们不准确我重用回收位图并将它们设为空,甚至调用 system.gc();而且我的记忆是不变的,我只是不明白为什么在 sumasung galxy s5 上需要 300 MB 的内存,而在我的联想上只需要 40。如果我确定,我的联想是 hdpi s5 是 xxhdpi。

【问题讨论】:

    标签: android bitmap out-of-memory


    【解决方案1】:

    看起来您的应用是使用 xml 文件中定义的布局构建的。这些布局使用图像作为背景图像或ImageButtonImageView 等的源图像。所有可绘制对象通常存储在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必须知道这些事情。

    【讨论】:

      【解决方案2】:

      这个问题可以很容易解决

      只需在清单文件中的应用程序标记中添加这一行

      android:largeHeap="true"

      喜欢这个

      <application android:largeHeap="true" android:allowBackup="true" ......

      如果您想进一步优化代码,请使用 eclipse 中的内存分析器

      【讨论】:

      • 更好地修复您的泄漏?就像回收位图和其他东西一样,largeHeap=true 并不总是有帮助
      • 是的,我知道修复泄漏更好,但有时可能会有大图像,这就是为什么我认为 largeheap 是更好的解决方案
      【解决方案3】:

      除了位图和可绘制对象之外,最常见的问题是通过 Activity 上下文泄漏内存。确保您没有将活动传递给回调侦听器。 分析内存的好工具是MAT(Memory Analyzer Tool)。它可以帮助您找出应用中的内存泄漏

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 2013-05-11
        • 1970-01-01
        相关资源
        最近更新 更多