使用了内存之后方向变化的5倍 [英] Out of Memory using after 5 times of change orientation

查看:237
本文介绍了使用了内存之后方向变化的5倍的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我处理与拉尔图片900×900 尺寸。该图像是由一个GridView实现显示。有ViewPager的页面中5 GridView的。这个问题后,屏幕方向变化的4倍,我得到了内存不足的错误,图像开始不显示。该
长大堆上升至43万桶。我张贴的日志猫错误。我使用的通用图像装载

 文件cacheDir =新的文件(getActivity()getExternalCacheDir(),CachedImages);
        如果(!cacheDir.exists())
            cacheDir.mkdir();        ImageLoaderConfiguration配置=新ImageLoaderConfiguration.Builder(
                getActivity())
                .threadPoolSize(5)
                .threadPriority(从Thread.MIN_PRIORITY + 3)的
                //。denyCacheImageMultipleSizesInMemory()
                .discCacheFileNameGenerator(新的Hash codeFileNameGenerator())
                .discCacheSize(3048576 * 20)
                .memoryCache(新WeakMemoryCache())
                // 1MB = 1048576 * 20声明或以上尺寸图像是否超过
                // 200                .discCache(新UnlimitedDiscCache(cacheDir))
                //你可以通过你自己的盘缓存实现
                // .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                。建立();
        imageLoader.init(配置);


 选项=新DisplayImageOptions.Builder()
        //.showStubImage(icon)
        //因为你重用视图不同
        //图像,您可以在视图中看到一个previous形象,而新的图像加载。 .resetViewBeforeLoading(真
        .showImageForEmptyUri(R.drawable.content_picture)
        .showImageOnFail(R.drawable.content_picture)
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
        .bitmapConfig(Config.RGB_565)
        .cacheInMemory(假)
        .cacheOnDisc(真)        .resetViewBeforeLoading(真)
        .bitmapConfig(Bitmap.Config.RGB_565)
        。建立();


LogCat中:

  10-22 18:19:25.856:E / SkWMTJdec(19464):wmt_jdec_header错误:ERR_JDEC_NOT_SUPPORT_PROFILE!
10-22 18:19:26.028:I / dalvikvm堆(19464):从48.663MB钳目标GC堆48.000MB
10-22 18:19:26.034:D / dalvikvm(19464):GC_FOR_ALLOC释放692K,免费47698K / 49031K,暂停117ms,123ms总额3%
10-22 18:19:26.034:I / dalvikvm堆(19464):强制SoftReferences的集合1783372字节分配
10-22 18:19:26.171:I / dalvikvm堆(19464):从48.646MB钳目标GC堆48.000MB
10-22 18:19:26.176:D / dalvikvm(19464):GC_BEFORE_OOM释放16K,免费47681K / 49031K 3%,暂停140ms的,共有140ms的
10-22 18:19:26.176:E / dalvikvm堆(19464):出于对1783372字节分配内存。
10-22 18:19:26.177:I / dalvikvm(19464):池182线程1PRIO = 4 TID = 13 RUNNABLE
10-22 18:19:26.179:I / dalvikvm(19464):|组=主SCOUNT = 0 dsCount = 0 = OBJ自我0x41713660 = 0x5c8d92b0
10-22 18:19:26.179:I / dalvikvm(19464):| sysTid = 19664漂亮= 10章附表= 3/0 CGRP =的fopen错误:2] =办理1551184560
10-22 18:19:26.180:I / dalvikvm(19464):| schedstat =(0 0 0)UTM = 31 STM = 2芯= 0
10-22 18:19:26.182:I / dalvikvm(19464):在android.graphics.Bitmap.nativeCreate(本机方法)
10-22 18:19:26.183:I / dalvikvm(19464):在android.graphics.Bitmap.createBitmap(Bitmap.java:640)
10-22 18:19:26.189:I / dalvikvm(19464):在android.graphics.Bitmap.createBitmap(Bitmap.java:586)
10-22 18:19:26.189:I / dalvikvm(19464):在com.nostra13.universalimageloader.core.de$c$c.BaseImageDe$c$cr.considerExactScaleAndOrientaiton(BaseImageDe$c$cr.java:188)
10-22 18:19:26.190:I / dalvikvm(19464):在com.nostra13.universalimageloader.core.de code.BaseImageDe coder.de code(BaseImageDe coder.java :76)
10-22 18:19:26.192:I / dalvikvm(19464):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.de$c$cImage(LoadAndDisplayImageTask.java:305)
10-22 18:19:26.193:I / dalvikvm(19464):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:251)
10-22 18:19:26.194:I / dalvikvm(19464):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:129)
10-22 18:19:26.195:I / dalvikvm(19464):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-22 18:19:26.195:I / dalvikvm(19464):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
10-22 18:19:26.195:I / dalvikvm(19464):在java.lang.Thread.run(Thread.java:856)
10-22 18:19:26.197:I /内onLoadingComplete查看标签:(19464):image_item_grid_image
10-22 18:19:26.204:E / ImageLoader的(19464):空
10-22 18:19:26.204:E / ImageLoader的(19464):java.lang.OutOfMemoryError
10-22 18:19:26.204:E / ImageLoader的(19464):在android.graphics.Bitmap.nativeCreate(本机方法)
10-22 18:19:26.204:E / ImageLoader的(19464):在android.graphics.Bitmap.createBitmap(Bitmap.java:640)
10-22 18:19:26.204:E / ImageLoader的(19464):在android.graphics.Bitmap.createBitmap(Bitmap.java:586)
10-22 18:19:26.204:E / ImageLoader的(19464):在com.nostra13.universalimageloader.core.de$c$c.BaseImageDe$c$cr.considerExactScaleAndOrientaiton(BaseImageDe$c$cr.java:188)
10-22 18:19:26.204:E / ImageLoader的(19464):在com.nostra13.universalimageloader.core.de code.BaseImageDe coder.de code(BaseImageDe coder.java :76)
10-22 18:19:26.204:E / ImageLoader的(19464):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.de$c$cImage(LoadAndDisplayImageTask.java:305)
10-22 18:19:26.204:E / ImageLoader的(19464):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:251)
10-22 18:19:26.204:E / ImageLoader的(19464):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:129)
10-22 18:19:26.204:E / ImageLoader的(19464):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-22 18:19:26.204:E / ImageLoader的(19464):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
10-22 18:19:26.204:E / ImageLoader的(19464):在java.lang.Thread.run(Thread.java:856)


更新:

  @覆盖
   公共无效的onPause(){
       super.onPause();
       imageLoader.pause();
   }   @覆盖
   公共无效onResume(){
       super.onResume();
       imageLoader.resume();
   }   @覆盖
   公共无效的onDestroy(){
       super.onDestroy();
       imageLoader.stop();   }


解决方案

请编辑code到

  DisplayImageOptions defaultOptions =新DisplayImageOptions.Builder()
        .showImageForEmptyUri(R.drawable.content_picture)
        .showImageOnFail(R.drawable.content_picture)        .resetViewBeforeLoading(假)
        .delayBeforeLoading(1000)
        .cacheOnDisc(真)
        .bitmapConfig(Bitmap.Config.RGB_565)
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
        。建立();        ImageLoaderConfiguration配置=新ImageLoaderConfiguration.Builder(getActivity())
        .discCacheExtraOptions(480,800,COM pressFormat.JPEG,75,NULL)
        .threadPoolSize(5)
        .defaultDisplayImageOptions(defaultOptions)
        .denyCacheImageMultipleSizesInMemory()
        .discCacheSize(50 * 1024 * 1024)
        .writeDebugLogs()
        。建立();
        。ImageLoader.getInstance()的init(配置);        。ImageLoader.getInstance()handleSlowNetwork(真);

I am handling larges images with 900 x 900 dimension. The images are displayed by a gridview implementation. There are 5 gridviews inside ViewPager's pages. The problem after 4 times of screen orientation change, I am getting out of memory error and the images starts not displaying. The grow heap increases up to 43 mb. I posted the log cat errors. I am using Universal-image-loader.

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();


LogCat:

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();

   }

解决方案

Please edit your code to

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
        .showImageForEmptyUri(R.drawable.content_picture)
        .showImageOnFail(R.drawable.content_picture)

        .resetViewBeforeLoading(false)
        .delayBeforeLoading(1000)
        .cacheOnDisc(true)
        .bitmapConfig(Bitmap.Config.RGB_565)
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
        .build();

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getActivity())
        .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)
        .threadPoolSize(5)
        .defaultDisplayImageOptions(defaultOptions)
        .denyCacheImageMultipleSizesInMemory()
        .discCacheSize(50 * 1024 * 1024)
        .writeDebugLogs()
        .build();


        ImageLoader.getInstance().init(config);

        ImageLoader.getInstance().handleSlowNetwork(true);

这篇关于使用了内存之后方向变化的5倍的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆