Android 使新的异步任务在后台或 Dropbox Core 中优先于其他任务 API 问题

Android Make a new Async task have priority over others in background or Dropbox Core API issue

我正在使用 Android 中的核心 API 从 Dropbox 加载多张照片,并在发出请求时将它们序列化。

我正在让缩略图显示在网格视图中,当用户点击其中一个时,它会转到另一个 activity 它会从服务器获取完整的 res 版本。

它做得很好,但高分辨率版本只有在所有其他获取缩略图的异步任务完成后才开始下载。

所以我想知道的是,这是 Dropbox Core API 的限制吗?或者有没有办法让高分辨率异步任务优先于其他任务,以便立即下载它,然后其他人可以恢复。

这是因为异步任务的实际工作方式。他们在 3.0+ 上没有 运行 并行(他们在 3.0 之前一直如此),因为太多的新手开发人员无法在没有错误的情况下并行编程,所以 Google 决定改变它。相反,异步任务 运行 按 FIFO 顺序在单个线程上执行。

不过您可以覆盖它。不要调用 asynctask.execute(),而是调用 asynctask.executeOnExecutor() 并使用 THREAD_POOL_EXECUTOR。这将在它自己的线程上并行执行它。我相信有一个螺纹帽,但它至少可以并行制作多个 运行。

如果线程上限成为问题,您始终可以使用线程而不是使用异步任务。您需要自己做一些工作才能执行 onPostExecute,但这并不难。如果您要创建自己的线程,则可以达到 OS 限制。