【问题标题】:Handling large number of async tasks in short time短时间内处理大量异步任务
【发布时间】:2014-12-20 00:28:29
【问题描述】:

我需要按特定顺序调用很多 xmlrpc 请求(其中四个)。我对每一个都使用异步任务,这没关系,但它似乎有很多代码和读/写文件,我把所有这些异步都放在一个意图服务中。问题是当我需要在短时间内多次调用意图并且我无法轻松取消或停止异步任务时。我知道我可能不应该为此目的使用意图服务,所以请告诉我处理大量异步任务的最佳解决方案是什么?

谢谢!

【问题讨论】:

  • 你能发布意向服务的内容以及它是如何被调用的吗?
  • 我现在不能。怎么调用都无所谓:)我们只是说当所有异步完成时,意图服务会通知活动中的广播接收者它已经完成。

标签: android android-asynctask intentservice


【解决方案1】:

您只能使用有限数量的异步任务( 来自here)

private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final int KEEP_ALIVE = 1;

所以最好只使用意图服务。也许您可以将您的意图/请求存储在集合中并在服务中取消/停止它们?

或者也许你可以使用 Volley?它可以取消队列中的请求。

【讨论】:

  • 我可以结合xmlrpc和volley吗?我正在使用 xmlrpc-android 库
【解决方案2】:

使用加载器 (http://developer.android.com/guide/components/loaders.html)

您可以在需要时阻止它们。

【讨论】:

    【解决方案3】:

    只需使用加载器。 如果您必须使用低于该支持加载器的 API - 只需在您的项目中包含支持库。 加载器与 AsynkTasks 相同,但改进更多,可以捕获许多错误。使用时可以避免很多麻烦。

    【讨论】:

    • @File 您可以在 IntentService 中创建静态布尔变量。每次在线程中,您都必须检查它。时机成熟时 - 只需在 onHandleIntent 中调用 return。
    • 如果我需要在它尚未完成的时间内再次调用相同的 Intent 服务,那么我将布尔值设置为 false 并且服务停止......问题是当我再次调用服务时boolean 仍然是 false。
    • 单实例类呢?将有关 IntentService 的布尔变量保存在那里,您可以随时随地了解状态。
    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2015-07-18
    • 2018-03-05
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多