我在理解为什么这段代码时遇到了一些麻烦
public class BitmapAllocTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
byte[] b = new byte[20 * 1000 * 1000];
b = null;
Bitmap.createBitmap(2500, 2000, Bitmap.Config.ARGB_8888);
}
}
在具有24mb堆限制的设备上抛出OutOfMemory异常 . 如果我注释掉任何一个分配它运行正常 . 我的印象是java vm会在抛出OutOfMemory异常之前尝试垃圾收集 .
我怀疑它与android在本机堆上分配位图有关 .
2 回答
我在问题跟踪器上发布了这个并得到了这个答案:
链接:http://code.google.com/p/android/issues/detail?id=10821
您必须自己触发GC并重试 . 我最近不得不这样做,无法想出另一种方法 .