如果我对此块进行评论,那么GC垃圾邮件就会消失。是什么导致了垃圾邮件?如果我注释掉“//清理”部分,那么垃圾邮件仍在那里。
public void updatePixels()
{
// Fill the bitmap with black.
mBitmap.eraseColor(Color.BLACK);
// Pass bitmap to be rendered by native function.
if(!mNativeHelper.render(mBitmap)) return;
// If FroyVisuals has text to display, then use a canvas and paint brush to display it.
String text = mActivity.mTextDisplay;
if(text != null)
{
// Give the bitmap a canvas so we can draw on it.
mCanvas.setBitmap(mBitmap);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(10);
paint.setTypeface(Typeface.create(Typeface.SERIF, Typeface.ITALIC));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
paint.setColor(Color.WHITE);
paint.setTextAlign(Paint.Align.CENTER);
float canvasWidth = mCanvas.getWidth();
float textWidth = paint.measureText(text);
float startPositionX = (canvasWidth - textWidth / 2) / 2;
mCanvas.drawText(text, startPositionX, mTextureWidth-12, paint);
paint = null;
}
// Flip the texture vertically.
Matrix flip = new Matrix();
flip.postScale(1f, -1f);
Bitmap temp = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), flip, true);
// Copy bitmap pixels into buffer.
mPixelBuffer.rewind();
temp.copyPixelsToBuffer(mPixelBuffer);
// Cleanup
temp.recycle();
temp = null;
flip = null;
}
答案 0 :(得分:1)
我不确定你用“这个块”指的是哪个部分所以我认为你的意思是整个方法。您正在此方法中创建对象
这里
Paint paint = new Paint();
在这里
Bitmap temp = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), flip, true);
因此,如果经常调用此方法,您会看到这些对象很多。您应该使用不需要在每次调用时创建对象的方法。例如,您可以在第一次运行方法时创建bitmap
,然后操纵该位图的canvas
以实现翻转。
您可以抓取canvas
in the constructor并使用rotate()在每次方法调用开始时进行操作。这样,您就可以在第一次方法调用时创建Bitmap
和Canvas
。
此外,每当你创建一个Bitmap时,这也可以为此分配视频内存,所以它看起来效率更低!