android在运行时检查堆内存

时间:2014-01-14 09:53:41

标签: android

我有一个Android应用程序,这个应用程序连接到服务器下载图像,但这个图像有多个副本,第一个复制1600 * 1080像素,第二个是800 * 540 ... 因此设备应该将标签发送到服务器以下载该设备的良好图像 我使用了很多方法来检查设备内存或密度,但结果不够明确,无法做出决定,这里使用了一些代码:

 float density = getResources().getDisplayMetrics().density;
 long mem = Runtime.getRuntime().freeMemory();
 long heap = Debug.getNativeHeapAllocatedSize();

结果是针对3个这样的设备:

samsumg标签10英寸= 1.0 , 745464 , 3249552 byte

中国标签7英寸= 1.0 , 559944 , 2789016 byte

htc moble 3.4英寸= 1.5 , 1760904 , 8942736 byte

结果显示htc更好但不是因为我无法查看最高分辨率,但在其他设备上它非常好 错误消息: java.lang.OutOfMemoryError:位图大小超过VM预算(堆大小= 7687KB,分配= 3356KB,位图大小= 25092KB)

这个问题有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您的决定应取决于两个因素:

  1. 屏幕密度。
  2. 屏幕尺寸。
  3. 在你的情况下,你已经在htc上收到了hdpi drawables,但它是小型设备,因此不需要在小型设备上显示包含更多细节的大图像。

    有关有效加载大位图的更多信息:

    http://developer.android.com/training/displaying-bitmaps/load-bitmap.html