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 分析。