Ash*_*win 10 android memory-leaks memory-management
当应用程序从Splash屏幕加载到Main页面时会发生这种情况.它只发生在不在模拟器上的设备上:
05-17 08:10:16.627: I/dalvikvm-heap(14021): Grow heap (frag case) to 20.580MB for 2424256-byte allocation
05-17 08:10:16.666: D/dalvikvm(14021): GC_FOR_ALLOC freed 1K, 3% free 21000K/21511K, paused 21ms
05-17 08:10:16.697: D/dalvikvm(14021): GC_CONCURRENT freed 116K, 3% free 20885K/21511K, paused 2ms+2ms
05-17 08:10:16.720: D/dalvikvm(14021): GC_FOR_ALLOC freed 44K, 4% free 20841K/21511K, paused 10ms
05-17 08:10:16.728: I/dalvikvm-heap(14021): Grow heap (frag case) to 24.533MB for 4310896-byte allocation
Run Code Online (Sandbox Code Playgroud)
我使用了Ecplise MAT - 解析了字节分配--Android.Graphics.Bitmap $ preloaded images ...
我使用的设备是Google Nexus Prime,Android 4.0
有没有遇到过同样的人?有人会抛出一些专业知识......
hjm*_*hjm 14
我遇到了同样的问题并找到了解决方案.
你是从资源加载你的位图吗?如果是这样,请尝试将它们放在相应的可绘制文件夹中,而不是将它们保存在"drawable"或"drawable-mdpi"中.
当您将图像资源放在普通的可绘制文件夹中时,对系统来说它意味着drawable-mdpi.因此,具有高或超高dpi的设备(我相信Galaxy Nexus是超高)将扩展该资源以匹配设备的dpi.
如果您的资源只有1个大小,请将它们放在drawable-nodpi中,它将按原样使用.但是你的一些布局可能会受此影响,因此我将某些图像保存在可绘制文件夹中(如按钮图像等),并将背景和其他更大的资源移动到drawable-nodpi中.
希望这可以帮助 ;)
Amo*_*tir 10
您可能正在尝试解码Bitmap导致OutOfMemory异常的非常大的问题.这意味着您尝试实现的操作超出了设备上每个应用程序所允许的VM预算,就堆内存消耗而言(在您的设备上似乎是24 MB,在您的模拟器上可能更多,这就是为什么它没有不会发生在那里!).
例如,尝试将您Bitmap的样本提高两倍:
BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 2;
Bitmap b = BitmapFactory.decodeFile(pathToBitmap, o);
Run Code Online (Sandbox Code Playgroud)