2011-05-20 109 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