关于极大图像的Android排球OutOfMemoryError

时间:2015-08-05 21:39:47

标签: android image out-of-memory android-volley

我正在使用凌空将图像加载到NetworkImageView中 - 但图像是由用户上传的,并且无法保证它们的大小合理。

现在我在抓取大图像时看到OutOfMemoryErrorhttp://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73751/world.topo.bathy.200407.3x21600x21600.C2.jpg

08-05 21:34:35.280    3435-3462/com.example E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-731
    java.lang.OutOfMemoryError
            at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:122)
            at com.android.volley.toolbox.BasicNetwork.entityToBytes(BasicNetwork.java:256)
            at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:129)
            at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)

异常看起来像是在一个线程内发生的,所以我真的不知道如何在它发生时捕获这个异常。理想情况下,我只是展示占位符并继续前进,但现在我的应用程序只是崩溃了。

我在Application对象中设置了图像加载器:

requestQueue = Volley.newRequestQueue(getApplicationContext());
imageLoader = new ImageLoader(requestQueue, new LruBitmapCache(LruBitmapCache.getCacheSize(getApplicationContext())));

我在我的setImageUrl个类中使用Activity加载图片:

((NetworkImageView)view.findViewById(R.id.image)).setImageUrl(url.toString(), application.getImageLoader());

确保图像缓存不会变得太大的标准建议在这里不适用,我相信,因为即使只将一个大图像加载到空的缓存中,我也会看到这种崩溃。

此外,稍微调查一下,我不相信这个错误甚至在ImageLoader代码路径中,所以像缩放位图等技巧似乎不适用于此(即使我能找到一种方法获取凌空正在使用的BitmapFactory.Options对象的句柄。

我有什么办法可以防止凌空线程中的这个异常导致我的应用程序崩溃吗?

0 个答案:

没有答案