2017-04-18 18 views
-2

我嘗試在android中將圖像從blob azure加載到gridview。在doInBackground我有這個code`Android中的位圖OutMemoryOfException

ArrayList<Bitmap> userBitmaps=new ArrayList<>(); 
URL urlConnection = new URL(blob.getUri().toString()); 
HttpURLConnection connection = (HttpURLConnection) urlConnection.openConnection(); 
connection.setDoInput(true); 
connection.connect(); 
Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(blob.getUri().toString()).getContent()); 
userBitmaps.add(bitmap);` 

當我打開的頁面與此gridview的第一次一切正常,但第二次我有這樣的錯誤

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1                     java.lang.RuntimeException: An error occured while executing doInBackground() 
          at android.os.AsyncTask$3.done(AsyncTask.java:299) 
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
at java.lang.Thread.run(Thread.java:841) 

Caused by: java.lang.OutOfMemoryError 
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:696) 
at com.example.gaya.searchpeople.UsersInfoActivity$NetworkConnector.doInBackground(UsersInfoActivity.java:151) 
at com.example.gaya.searchpeople.UsersInfoActivity$NetworkConnector.doInBackground(UsersInfoActivity.java:119) 
at android.os.AsyncTask$2.call(AsyncTask.java:287) 
at java.util.concurrent.FutureTask.run(FutureTask.java:234)` 

請幫忙解決我的問題,謝謝。

回答

1

我會建議你自己不要處理位圖和內存。

而是使用圖書館像Glide加載位圖轉換爲ImageView小號

2

位佔用內存如此much.suggest使用FrescoGlide,或picasso下載picture.these圖像加載librays可以方便處理位圖。

+0

謝謝,它幫助我) –

0

這些BitmapBitmapFactory生成的對象,這些內存無法通過Android垃圾回收機制回收,因爲如果查看BitmapFactory源代碼,則可以通過調用JNI方法來實現Bitmap對象的生成。

Android開發者網站已經展示瞭如何Managing Bitmap Memory。並且有一個blog,它引入4種方法來解決問題Bitmap知道如何爲Bitmap做內存優化。