2011-05-20 98 views
19

我正在开发一个非常耗费内存的应用程序,并且想要使用largeHeap-Tag,这会给应用程序多一点内存。无论我在AndroidManifest.xml中设置了这个标记,它对我给出的实际内存都没有影响。 I'm读出我的最大内存是这样的:largeHeap = true清单标签不起作用?

Log.v("Utils","Max Mem in MB:"+(Runtime.getRuntime().maxMemory()/1024/1024)); 

我的清单长得挺像的:

<application android:label="@string/app_name" android:hardwareAccelerated="true" android:largeHeap="true" android:debuggable="true"> 

    <activity android:name=".EntryActivity" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 

I'm在模拟器中运行3.1 ,我上面的日志输出总是48MB。有人可以帮忙吗?

+0

不是为了避免这个问题,但你使用这种内存的目的是什么? – Nick 2011-05-20 17:07:08

+3

我打赌的图像处理! – binnyb 2011-05-20 17:13:07

+1

......如果还有其他方法可以修改高分辨率图片,这将非常受欢迎。但我没有找到另一种方式,而不是使用非常大的位图。 – stk 2011-05-20 17:47:49

回答

12

使用ActivityManager.getMemoryClass()ActivityManager.getLargeMemoryClass()来验证分配给您的应用程序的近似值。

+0

我知道这个方法,但它并没有返回实际的堆限制值iirc。它只会返回大堆或正常堆的限制,但这并不代表限制现在是标准还是大。 – stk 2011-05-20 18:03:58

+0

返回的值是什么? – 2011-05-20 19:14:15

+0

啊好吧......它说模拟器中的大容量与'普通'堆大小相同...需要在真正的设备上测试! – stk 2011-05-20 20:33:29

9

事实上,大堆将与普通堆一样,直到您的应用程序需要更多内存才能完成任务。你的虚拟机将在控制台上显示这样的消息:

06-30 15:38:14.770: INFO/dalvikvm-heap(9075): Grow heap (frag case) to 42.365MB for 6152016-byte allocation 
06-30 15:38:16.680: INFO/dalvikvm-heap(9075): Grow heap (frag case) to 39.739MB for 3517456-byte allocation