我正在使用凌空将图像加载到NetworkImageView
中 - 但图像是由用户上传的,并且无法保证它们的大小合理。
现在我在抓取大图像时看到OutOfMemoryError
:http://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
对象的句柄。
我有什么办法可以防止凌空线程中的这个异常导致我的应用程序崩溃吗?