Android内存溢出问题---用自行开辟的空间进行对内存管理

public static Bitmap readBitmap(String path) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inPurgeable = true;
options.inInputShareable = true;
options.inSampleSize = computeSampleSize(options, -1, 128*128);
options.inJustDecodeBounds = true;
//自行在Android上开辟一段12K大小的内存空间,存储的图片放在该内存中
options.inTempStorage=new byte[12 * 1024]; 
// 获取资源图片
InputStream is;
try {
is = new FileInputStream(path);
return BitmapFactory.decodeStream(is, null, options);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;

}
public static int computeSampleSize(BitmapFactory.Options options,
       int minSideLength, int maxNumOfPixels) {
   int initialSize = computeInitialSampleSize(options, minSideLength,
           maxNumOfPixels);
 
   int roundedSize;
   if (initialSize <= 8) {
       roundedSize = 1;
       while (roundedSize < initialSize) {
           roundedSize <<= 1;
       }
   } else {
       roundedSize = (initialSize + 7) / 8 * 8;
   }
 
   return roundedSize;
}
private static int computeInitialSampleSize(BitmapFactory.Options options,
       int minSideLength, int maxNumOfPixels) {
   double w = options.outWidth;
   double h = options.outHeight;
 
   int lowerBound = (maxNumOfPixels == -1) ? 1 :
           (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
   int upperBound = (minSideLength == -1) ? 128 :
           (int) Math.min(Math.floor(w / minSideLength),
           Math.floor(h / minSideLength));
 
   if (upperBound < lowerBound) {
       return lowerBound;
   }
 
   if ((maxNumOfPixels == -1) &&
           (minSideLength == -1)) {
       return 1;
   } else if (minSideLength == -1) {
       return lowerBound;
   } else {
       return upperBound;
   }
}

你可能感兴趣的:(内存管理,内存溢出)