【问题标题】:why a simple android app takes large memory为什么一个简单的 android 应用程序占用大量内存
【发布时间】:2014-12-19 14:04:48
【问题描述】:

我正在开发一个 android 应用程序,它有许多可绘制的 png 图像,它有一个包含 10 个表单字段的表单,但是当应用程序运行时,它会占用高达 200 mb 的内存。

该应用程序具有启动画面和四个主要活动。 我正在使用 nexus 10.1 英寸设备 在我见过的logcat中: 将堆(碎片情况)增加到 43.800MB 以分配 7166416 字节

我已将所有图像移至 drawable-xdpi 我使用了 System.gc(); 但是内存问题仍然存在,任何人都可以帮助我解决这个问题

【问题讨论】:

  • “当应用程序运行时,它会占用多达 200 mb 的内存”——这是极不可能的。欢迎您使用procstats 或等效项来更好地了解您的进程占用了多少内存,欢迎您使用 MAT 来确定您正在使用多少堆空间以及该堆空间的用途。
  • 正如@CommonsWare 所说,检查你的记忆。 Vogella 写了一个相当简洁的教程vogella.com/tutorials/EclipseMemoryAnalyzer/article.html
  • 您使用的是大图吗?还是很多?
  • @Der Golem 我使用大图像作为启动画面,而按钮的图像数量为 130
  • 好的,然后问我们为什么您的应用可能会产生 OOM...

标签: android performance memory


【解决方案1】:

这里有几件事

1:您可以降低图像的“质量”,而不会真正影响它们在 应用。您可以使用“gimp”或类似工具来为存储在 你的资源目录。

2:在使用BitmapFactory.Options读取它们时,使用inSampleSize会大大减少你的内存占用,因为调用BitmapFactory.decodeStream时图像会被缩小。

 BitmapFactory.Options options = new BitmapFactory.Options();
   Options.inSampleSize = 2;
   Options.inPreferredConfig = Bitmap.Config.RGB_565;

3:确保在完成位图后调用 recycle()。

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    相关资源
    最近更新 更多