我有一個非常消耗內存的應用程序 - 處理大型位圖。我已經使用衆所周知的技術來處理這些位圖(請在答案中沒有關於教程的鏈接...),以便它運行正常,但沒有任何異常,但僅在運行HC和ICS的設備上,Jelly Bean上的相同應用程序內存消耗高出近80%,導致用戶體驗不佳,該應用程序滯後且速度緩慢。Android Jelly Bean在Nexus 7上的內存消耗非常高
我準備了一個簡單的測試,在Eclipse中使用模板創建了最簡單的Android應用程序;該應用只有一個背景位圖(1280 x 800)的活動。搭載Android 3.1(華碩A500)裝置,它分配:
01-23 12:28:02.402: D/dalvikvm(31706): GC_FOR_ALLOC freed 65K, 4% free 6559K/6787K, paused 17ms
01-23 12:28:02.402: I/dalvikvm-heap(31706): Grow heap (frag case) to 10.355MB for 4096016-byte allocation
01-23 12:28:02.432: D/dalvikvm(31706): GC_CONCURRENT freed 1K, 3% free 10558K/10823K, paused 1ms+2ms
在Nexus 7與豆形軟糖4.2.1它分配:
01-23 12:13:49.740: D/dalvikvm(23815): GC_FOR_ALLOC freed 84K, 4% free 7464K/7700K, paused 18ms, total 18ms
01-23 12:13:49.750: I/dalvikvm-heap(23815): Grow heap (frag case) to 11.338MB for 4096016-byte allocation
01-23 12:13:49.770: D/dalvikvm(23815): GC_FOR_ALLOC freed 1K, 3% free 11463K/11704K, paused 23ms, total 23ms
01-23 12:13:49.800: D/dalvikvm(23815): GC_CONCURRENT freed <1K, 3% free 11463K/11704K, paused 2ms+2ms, total 23ms
01-23 12:13:49.900: D/dalvikvm(23815): GC_FOR_ALLOC freed <1K, 3% free 11463K/11704K, paused 12ms, total 13ms
01-23 12:13:49.920: I/dalvikvm-heap(23815): Grow heap (frag case) to 18.259MB for 7259056-byte allocation
01-23 12:13:49.940: D/dalvikvm(23815): GC_FOR_ALLOC freed 0K, 2% free 18552K/18796K, paused 16ms, total 16ms
01-23 12:13:49.960: D/dalvikvm(23815): GC_CONCURRENT freed <1K, 2% free 18552K/18796K, paused 3ms+2ms, total 17ms
所以我有兩個問題:
1 ,爲什麼應用程序在其主要活動的背景上僅使用一個位圖時會消耗太多內存?
2,爲什麼在運行相同的應用程序時,JellyBean的設備的內存消耗幾乎高出80%?
EDIT1:
所有器件都具有相同的屏幕分辨率:1280 x 800像素的
隨着果凍豆的UI的平滑性得到改善。可以通過對特定圖像和/或顯示區域進行雙緩衝來實現這一點? – Robert
查看目標API設置爲15的'Bitmap'文檔,兩組方法變爲淺灰色,可能會影響內存使用:[isPremultiplied()](http://developer.android.com/reference/android/graphics/ Bitmap.html#isPremultiplied())和[hasMipMap()](http://developer.android.com/reference/android/graphics/Bitmap.html#hasMipMap())。也許其中的一個在平臺更新中將其默認值從false切換爲true? – Barend