我的 Android 应用存在内存问题
Memory issue with my Android app
您好,我的 Android 应用程序在我的 Lenovo a319 设备上运行良好,在此设备上,它同时在 Galaxy s5 设备上消耗 40 MB 内存,对于相同的构建 (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 px 尝试将它的大小调整为 400x300 px(你可以使用 Farstone Image Viewer这个)。对项目中的每个可绘制对象执行此操作,看看会发生什么。
也可能是您在 ListViews
中使用一些 ImageLoader 显示图像,例如 Glide(推荐)或 UIL 或 Picasso 或任何用途。此类加载器通常会消耗大量 RAM(但可配置)来满足缓存需求,因此 AOS 有时无法加载、构建和表示您自己使用图像的布局。
我还建议你 to lern how to display Bitmaps efficiently 你 必须 知道这些事情。
除了位图和可绘制对象之外,最常见的问题是通过 Activity 上下文泄漏内存。确保您没有将 activity 传递给回调侦听器。
一个很好的内存分析工具是MAT(Memory Analyzer Tool)。它可以帮助您找出应用程序中的内存泄漏
这个东西可以很容易地解决这个问题
只需在清单文件的应用程序标签中添加这一行
android:largeHeap="true"
像这样
<application
android:largeHeap="true"
android:allowBackup="true"
......
如果您想进一步优化代码,请使用 eclipse 中的内存分析器
您好,我的 Android 应用程序在我的 Lenovo a319 设备上运行良好,在此设备上,它同时在 Galaxy s5 设备上消耗 40 MB 内存,对于相同的构建 (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 px 尝试将它的大小调整为 400x300 px(你可以使用 Farstone Image Viewer这个)。对项目中的每个可绘制对象执行此操作,看看会发生什么。
也可能是您在 ListViews
中使用一些 ImageLoader 显示图像,例如 Glide(推荐)或 UIL 或 Picasso 或任何用途。此类加载器通常会消耗大量 RAM(但可配置)来满足缓存需求,因此 AOS 有时无法加载、构建和表示您自己使用图像的布局。
我还建议你 to lern how to display Bitmaps efficiently 你 必须 知道这些事情。
除了位图和可绘制对象之外,最常见的问题是通过 Activity 上下文泄漏内存。确保您没有将 activity 传递给回调侦听器。 一个很好的内存分析工具是MAT(Memory Analyzer Tool)。它可以帮助您找出应用程序中的内存泄漏
这个东西可以很容易地解决这个问题
只需在清单文件的应用程序标签中添加这一行
android:largeHeap="true"
像这样
<application
android:largeHeap="true"
android:allowBackup="true"
......
如果您想进一步优化代码,请使用 eclipse 中的内存分析器