Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 加載圖片時的內存問題

Android 加載圖片時的內存問題

編輯:關於Android編程

1.因為在內存中分配給圖片的堆棧只有8M,當圖片過大的時候,會出現內存洩露,如何解決呢。

BitmapFactory.Options options = new BitmapFactory.Options();

options.inSampleSize = 3; //圖片寬高都為原來的1/3,即圖片大小為原來的1/9

//以上代碼可以優化內存溢出,但它只是改變圖片的大小,即是圖片的縮略圖,並不能徹底解決內存溢出

 

 

2.圖片的壓縮

bitmap.compress(Bitmap.CompressFormat.PNG, 80, outStream); //80為壓縮率,即80%,對圖片壓縮再保存

 

3.圖片用過之後要清除緩存,即使Android虛擬機會定期進行垃圾回收,但是在Android的圖片處理過程中用到了java的庫函數和c的庫函數,

而c的庫函數所占用的內存無法通過垃圾回收來釋放,所以特別是對於大的圖片,我們要在使用完之後手動回收其內存空間,否則將會導致內存洩露

public void clearMemery(Bitmap bitmap) {
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
bitmap = null;
}
}

 

4.Android讀取BitMap的幾種方式

a. FileInputStream fis = new FileInputStream(/sdcard/test.png);

Bitmap bitmap = BitmapFactory.decodeStream(fis);

b. InputStream inputStream=getBitmapInputStreamFromSDCard("test.png");
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

c. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);

d. String SDCarePath=Environment.getExternalStorageDirectory().toString();
String filePath=SDCarePath+"/"+"test.png";
Bitmap bitmap = BitmapFactory.decodeFile(filePath, null);

e. Bitmap bitmap = BitmapFactory.decodeStream(getClass().getResourceAsStream("/res/drawable/test.png"));

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved