您好我的Android应用程序在我的联想a319设备上工作正常,在此设备中它同时在Galaxy s5设备上消耗40 MB RAM,它在同一版本(apk)上消耗300 Mb。我收到很多错误,例如Galaxy s5设备上的内存问题。
For Instance
内存不足
例外和
android.view.InflateException:二进制XML文件行
错误。我发现这个Question ,高分辨率会导致内存异常,我无法从该问题中提供的答案中获得任何线索,请提供相同的支持吗?
修改 感谢您的答案,但他们是不妥协的我重复使用循环位图,我把它们变为空,甚至调用system.gc();我的记忆是不变的,我只是不明白为什么在sumasung galxy s5上需要300 MB的内存,而在我的联想上需要40。如果我确定的话,我的联想是hdpi s5是xxhdpi。
答案 0 :(得分:2)
看起来您的应用是使用xml文件中定义的布局构建的。这些布局使用图像作为背景图像或ImageButton
或ImageView
等源图像等。所有可绘制文件通常都存储在drawable-DENSITY
个文件夹中。所以你需要降低所有drawable的分辨率以节省一些RAM。就像你有一些ImageView
的drawable一样,我们可以把它称为new_image.jpg,它在drawable-hdpi
中,它的分辨率是800x600 px,试着将它调整为400x300像素(你可以使用Farstone Image Viewer) 。对项目中的每个绘图都这样做,看看会发生什么
也可能是您使用某些ImageLoader(如Glide(推荐)或UIL或Picasso或其他任何用途)在ListViews
中显示图像。这样的加载器通常会消耗大量的RAM(但是可以配置)以满足缓存需求,并且由于AOS无法加载,构建和表示一些使用图像的布局。
另外,我建议你to lern how to display Bitmaps efficiently 必须知道这些事情。
答案 1 :(得分:1)
这件事可以很容易解决这个问题
只需在清单文件
中的应用程序标记中添加此行 android:largeHeap="true"
<application
android:largeHeap="true"
android:allowBackup="true"
......
如果你想更优化你的代码,那么在eclipse中使用 Memory Analyzer
答案 2 :(得分:0)
除了位图和drawable之外,最常见的问题是通过Activity上下文泄漏内存。确保您没有将活动传递给回调侦听器。 MAT(Memory Analyzer Tool)是分析内存的好工具。它可以帮助您找出应用中的内存泄漏