내 앱에는 GridView가 있으며 각 항목은 ImageView입니다. 이미지를 ImageViews로 설정하기 위해 사용자 지정 어댑터를 작성했습니다. AsyncTask를 사용하여 비동기 적으로 이미지 세트
캐시에서 이미지를 복원하는 내 AsyncTask
@Override
protected Bitmap doInBackground(Void... params) {
return BitmapFactory.decodeFile(file.getAbsolutePath());
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
} else {
// load image from db
}
}
조각에 배치 된 GridView입니다. 조각 조각 교체 후 줄에 OutOfMemoryError가 있습니다.BitmapFactory.decodeFile(file.getAbsolutePath());
E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:864)
Caused by: java.lang.OutOfMemoryError: (Heap Size=131079KB, Allocated=126797KB)
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:658)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:347)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:430)
at com.ThreeBoots.utils.ImageProcessor$2.doInBackground(ImageProcessor.java:248)
at com.ThreeBoots.utils.ImageProcessor$2.doInBackground(ImageProcessor.java:245)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:864)
이 문제를 해결하도록 도와주세요. 감사합니다!
비트 맵을 메모리로 직접로드하면 안됩니다. 결과 비트 맵의 크기를 정의하고 http://developer.android.com/training/displaying-bitmaps/load-bitmap.html에 설명 된 기술을 사용하여 비트 맵의 크기가 조정 된 버전을로드합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다