public void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (reMap) {
canvas.drawColor(Color.GRAY);
Bitmap bm = null;
bm = drawImage();
int x = bm.getWidth();
int y = bm.getHeight();
bitmap = Bitmap.createBitmap(bm, wn, hn, x > 480 - wn ? 480 : x,
y > 800 - hn ? 800 : y);
if (bm.isRecycled() == false) {
bm.recycle();
System.gc();
}
reMap = false;
}
canvas.drawBitmap(bitmap, 0, 0, null);
} private Bitmap drawImage() {
if (xm < 7 && ym < 11) {
return map[0][0];
}
Bitmap bm = Bitmap.createBitmap(560, 880, Config.RGB_565);
Canvas canvas = new Canvas(bm);
draw(canvas, 80, 11, 7);
return bm;
} private void draw(Canvas canvas, int n, int h, int w) {
Bitmap bm = null;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
bm = Bitmap.createScaledBitmap(map[yn + i][xn + j], n, n, true);
canvas.drawBitmap(bm, j * n, i * n, null);
}
}
if (bm.isRecycled() == false) {
bm.recycle();
System.gc();
}
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
}
这段代码是对一组小图片拼接成一个大图片的
但是有个很奇怪的问题???
debug模式运行内存不溢出
正常跑第一次不溢出   第二次就溢出了
求解??????????

解决方案 »

  1.   

    第一次正常,第二次溢出
    一般是第一次完了资源没释放掉,第二次又运行,到达了8M的上限我经常遇到这个问题,但是真不知道怎么解决的好,上次有高人指点说,JAVA层的资源释放掉了,但是NDK C层的资源没释放掉,导致这个问题反正貌似到目前为止没什么很靠谱的解决方案,一般都是用弱引或者软引的,但是效果也不是很好祝君好运,有什么好的办法了记得给我说下
      

  2.   


    汗  那为什么用debug运行确没有问题了......这个问题真的很头大
    这一大堆的图片处理   8M这个都不知道怎么搞
      

  3.   

    而且连recycle也是一样  debug跑就没问题
    自己跑就报错
    吐血掉.......
      

  4.   

    最后一个函数,create那么多,就recycle最后一个。