【问题标题】:A Correct way to queue and canceling asynctasks排队和取消异步任务的正确方法
【发布时间】:2023-03-27 14:39:02
【问题描述】:

我有一个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]

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

【问题讨论】:

  • 我建议您使用任何图像加载库,例如 Square 的 Picasso 或 Universal Image Loader 来加载图像。这些库允许您使用许多配置。

标签: android exception gridview android-asynctask


【解决方案1】:

缓存位图可以参考androiddocumentation两种方法

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2017-09-26
    相关资源
    最近更新 更多