排队和取消异步通信的正确方法

时间:2014-09-24 10:31:21

标签: android exception gridview android-asynctask

我有gridView,其中包含大约300个元素。每个元素都有imageView。调用getView()时,启动异步图像加载器,首先在LruCache中查找图像,然后在外部存储中查找,然后在网络中查找。异步任务从executeOnExecutor开始,参数为AsyncTask.THREAD_POOL_EXECUTOR。 问题是如果我滚动网格视图太快,会创建很多线程并且应用程序崩溃

E/AndroidRuntime(14980): java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@42426f98 rejected from java.util.concurrent.ThreadPoolExecutor@41c6c800[Running, pool size = 128, active threads = 128, queued tasks = 10, completed tasks = 3]

任何人都可以建议一些方法来控制任务量以避免此类异常。 谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用两种方法来引用android documentation来缓存位图

  • 使用内存缓存或
  • 使用磁盘缓存

您也可以使用第三方库来缓存图像,但这种方法存在一个问题。 如果图像缓存在磁盘上,很少有图书馆默认不支持缓存清除选项。