ANDROID.UF.BITMAP
当尝试使用已被释放的资源时,就会报告 UF(使用已释放)问题。ANDROID.UF.BITMAP 警告表明存在以下尝试:在一张位图回收后,从该位图获取像素或为该位图设置像素。
示例 1
复制
public void addWatermark(final byte[] data) {
final Bitmap bmp = loadBitmap(data);
if (bmp != null) {
final int width = bmp.getWidth();
for (int i = 0; i < width; i++) {
bmp.setPixel(i, i, Color.argb(255, 0, 0, 0));
}
}
}
private Bitmap loadBitmap(byte[] data) {
final Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
if (bmp == null) {
Log.d(TAG, "Was not able to decode an image");
}
final int width = bmp.getWidth();
final int height = bmp.getHeight();
if (width <= 3 || height <= 3 ) {
bmp.recycle();
}
return bmp;
}
针对第 24 行的代码段报告 ANDROID.UF.BITMAP,因为如果位图尺寸小于 3(第 38 行),loadBitmap() 方法将回收该位图。
扩展
此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。