排队和取消异步任务的正确方法



我有一个gridView,它包含大约300个元素。每个元素都有一个CCD_ 2。当调用getView()时,启动异步映像加载程序,它首先在LruCache中查找映像,然后在外部存储中查找,然后在网络中查找。异步任务通过参数为AsyncTask.THREAD_POOL_EXECUTORexecuteOnExecutor启动。问题是,如果我滚动网格视图的速度太快,就会创建很多线程,应用程序会因而崩溃

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]

有人能建议一些控制任务量的方法来避免此类异常吗。非常感谢。

您可以参考android文档,使用两种方法缓存位图

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

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

最新更新