使用带有片段的通用映像加载器在引用基本活动时会出错

时间:2012-09-25 07:04:39

标签: android android-fragments universal-image-loader

我在https://github.com/nostra13/Android-Universal-Image-Loader使用了nostra13的通用图像加载器。我的问题是:

我有这些课程

PhotoActivity extends FragmentActivity

ImageFragment extends Fragment

我使用imageLoader初始化ImageFragment中的imageLoader = ImageLoader.getInstance();,在此片段中,我还使用imageLoader.displayImage(...)显示了一些图像。

当我的PhotoActivity停止时(onStop()被调用),我的ImageFragment也会停止,这会停止任何图片加载,因为我在{{{{}}中调用了imageLoader.stop() 1}}方法。但是,情况并非如此,它给了我NullPointerException,因为之后调用onStop()的{​​{1}},此方法此时调用onLoadingComplete() ImageLoadingListener(),因为片段脱离了它的活动。

getActivity()应该停止每个加载过程,不是吗?

1 个答案:

答案 0 :(得分:0)

ImageLoader使用ExecutorService作为任务池。 ImageLoader.stop()只执行具有下一个Java文档的ExecutorService.shutdown():

  

启动有序关闭,其中先前提交的任务已执行,但不会接受任何新任务。如果已经关闭,调用没有其他影响。

     

此方法不会等待先前提交的任务完成执行。

没有保证在shutdown()之后立即关闭活动任务。也许使用shutdownNow()对于那种情况是更好的选择(我会考虑它),但它仍然不能保证立即关闭任务。

所以在这个时刻你应该检查getActivity()。但我会考虑在ImageLoader停止后阻止触发回调。也许在下一个版本中。