치수가 900 x 900
인 라지 이미지를 처리하고 있습니다. 이미지는 gridview 구현에 의해 표시됩니다. ViewPager 페이지에는 5 개의 gridview가 있습니다. 화면 방향을 4 번 변경하면 문제가 발생하여 메모리 오류가 발생하고 이미지가 표시되지 않습니다. 힙은 최대 43MB까지 증가합니다. 로그 고양이 오류를 게시했습니다. 유니버설 이미지 로더을 사용하고 있습니다.변경 사항이 5 번 변경된 후 메모리 사용 중
File cacheDir = new File(getActivity().getExternalCacheDir(), "CachedImages");
if (!cacheDir.exists())
cacheDir.mkdir();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getActivity())
.threadPoolSize(5)
.threadPriority(Thread.MIN_PRIORITY + 3)
//.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())
.discCacheSize(3048576 * 20)
.memoryCache(new WeakMemoryCache())
// 1MB=1048576 *declare 20 or more size if images are more than
// 200
.discCache(new UnlimitedDiscCache(cacheDir))
// You can pass your own disc cache implementation
// .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.build();
imageLoader.init(config);
options = new DisplayImageOptions.Builder()
//.showStubImage(icon)
//Because you reuse view for different
//images you can see a previous image in the view while new image is loading. .resetViewBeforeLoading(true
.showImageForEmptyUri(R.drawable.content_picture)
.showImageOnFail(R.drawable.content_picture)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.bitmapConfig(Config.RGB_565)
.cacheInMemory(false)
.cacheOnDisc(true)
.resetViewBeforeLoading(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
로그 캣 :
10-22 18:19:25.856: E/SkWMTJdec(19464): wmt_jdec_header error : ERR_JDEC_NOT_SUPPORT_PROFILE!
10-22 18:19:26.028: I/dalvikvm-heap(19464): Clamp target GC heap from 48.663MB to 48.000MB
10-22 18:19:26.034: D/dalvikvm(19464): GC_FOR_ALLOC freed 692K, 3% free 47698K/49031K, paused 117ms, total 123ms
10-22 18:19:26.034: I/dalvikvm-heap(19464): Forcing collection of SoftReferences for 1783372-byte allocation
10-22 18:19:26.171: I/dalvikvm-heap(19464): Clamp target GC heap from 48.646MB to 48.000MB
10-22 18:19:26.176: D/dalvikvm(19464): GC_BEFORE_OOM freed 16K, 3% free 47681K/49031K, paused 140ms, total 140ms
10-22 18:19:26.176: E/dalvikvm-heap(19464): Out of memory on a 1783372-byte allocation.
10-22 18:19:26.177: I/dalvikvm(19464): "pool-182-thread-1" prio=4 tid=13 RUNNABLE
10-22 18:19:26.179: I/dalvikvm(19464): | group="main" sCount=0 dsCount=0 obj=0x41713660 self=0x5c8d92b0
10-22 18:19:26.179: I/dalvikvm(19464): | sysTid=19664 nice=10 sched=3/0 cgrp=[fopen-error:2] handle=1551184560
10-22 18:19:26.180: I/dalvikvm(19464): | schedstat=(0 0 0) utm=31 stm=2 core=0
10-22 18:19:26.182: I/dalvikvm(19464): at android.graphics.Bitmap.nativeCreate(Native Method)
10-22 18:19:26.183: I/dalvikvm(19464): at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
10-22 18:19:26.189: I/dalvikvm(19464): at android.graphics.Bitmap.createBitmap(Bitmap.java:586)
10-22 18:19:26.189: I/dalvikvm(19464): at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.considerExactScaleAndOrientaiton(BaseImageDecoder.java:188)
10-22 18:19:26.190: I/dalvikvm(19464): at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode(BaseImageDecoder.java:76)
10-22 18:19:26.192: I/dalvikvm(19464): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage(LoadAndDisplayImageTask.java:305)
10-22 18:19:26.193: I/dalvikvm(19464): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:251)
10-22 18:19:26.194: I/dalvikvm(19464): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:129)
10-22 18:19:26.195: I/dalvikvm(19464): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-22 18:19:26.195: I/dalvikvm(19464): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
10-22 18:19:26.195: I/dalvikvm(19464): at java.lang.Thread.run(Thread.java:856)
10-22 18:19:26.197: I/View tag inside onLoadingComplete:(19464): image_item_grid_image
10-22 18:19:26.204: E/ImageLoader(19464): null
10-22 18:19:26.204: E/ImageLoader(19464): java.lang.OutOfMemoryError
10-22 18:19:26.204: E/ImageLoader(19464): at android.graphics.Bitmap.nativeCreate(Native Method)
10-22 18:19:26.204: E/ImageLoader(19464): at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
10-22 18:19:26.204: E/ImageLoader(19464): at android.graphics.Bitmap.createBitmap(Bitmap.java:586)
10-22 18:19:26.204: E/ImageLoader(19464): at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.considerExactScaleAndOrientaiton(BaseImageDecoder.java:188)
10-22 18:19:26.204: E/ImageLoader(19464): at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode(BaseImageDecoder.java:76)
10-22 18:19:26.204: E/ImageLoader(19464): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage(LoadAndDisplayImageTask.java:305)
10-22 18:19:26.204: E/ImageLoader(19464): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:251)
10-22 18:19:26.204: E/ImageLoader(19464): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:129)
10-22 18:19:26.204: E/ImageLoader(19464): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-22 18:19:26.204: E/ImageLoader(19464): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
10-22 18:19:26.204: E/ImageLoader(19464): at java.lang.Thread.run(Thread.java:856)
UPDATE :
@Override
public void onPause(){
super.onPause();
imageLoader.pause();
}
@Override
public void onResume(){
super.onResume();
imageLoader.resume();
}
@Override
public void onDestroy(){
super.onDestroy();
imageLoader.stop();
}
에 코드를 수정하십시오 비트 맵을 다시로드하지 말고 이것에 대해 살펴보십시오. http://developer.android.com/training/displaying-bitmaps/load-bitmap.html –
@ A.S. 나는 언버사 이미지 로더 선생님을 사용하고 있습니다. – rahstame
다음을 확인하십시오 : http : //stackoverflow.com/questions/14958543/view-pager-with-universal-image-loader-out-of-memory-error –