【问题标题】:Wait for asynctask but only for max 10 seconds等待异步任务,但最多只能等待 10 秒
【发布时间】:2015-03-30 14:09:04
【问题描述】:

我有一个我调用的 AsyncTask

String a = ws.get();

所以该进程一直等到 asynctask 完成。

但我想要的是最多等待 10 秒,如果在那段时间内没有完成异步,我想通过它并让它在后台处理它。

所以流程是:

  • 异步调用
  • 等到它完成,但最多 10 秒
  • 其他代码

知道我将如何做到这一点吗?

编辑:

进一步解释我在做什么。 我正在迷你蓝牙打印机上打印一些数据。 当我按打印时,我运行一个准备要打印的数据的异步任务。 这个异步任务调用另一个异步任务从互联网上获取一些数据。但我在打印之前需要这些数据,所以我使用 ws.get()。但是,如果互联网速度很慢并且任务需要太多时间(5-10 秒),我想绕过 ws.get() 并无论如何打印但异步任务仍然需要运行,因为我从互联网获得的数据仍然会去到我的数据库它就不会被打印出来。

【问题讨论】:

  • 您可以在您的doInBackground() 中执行Thread.sleep(10000),但您可能需要重新启动任务而不使用.get()。但这是整体糟糕的设计。让用户等待 10 秒并盯着空白屏幕是不好的。如果您解释为什么您想这样做,也许有人可以帮助找到更好的方法
  • 用户没有等待。因为我在另一个 asynch 中称它为 asynch :D 关键是我的应用程序打印了一些数据。我称之为异步打印。但是在这次印刷中,我调用了另一个异步来从互联网上获取一些数据。但是如果这些数据在 10 秒或 5 秒内没有出现,我将在没有数据的情况下打印,但我仍然希望异步完成。
  • 为什么要等待 asynctask 运行时主 UI 不受影响。
  • 重点是我的应用打印了一些数据。我称之为异步打印。但是在这次印刷中,我调用了另一个异步来从互联网上获取一些数据。但是如果这些数据在 10 秒或 5 秒内没有出现,我将在没有数据的情况下打印,但我仍然希望异步完成。
  • 使用间隔为 1000 的计时器任务并运行它直到 10 秒(在 timertask 中增加一个变量并在变量达到 10 时退出它)然后进行打印。离开异步任务。

标签: android asynchronous android-asynctask


【解决方案1】:

是的,有AsyncTask.get()

ws.get(10000, TimeUnit.MILLISECONDS);//10000 equal to 10 seconds

更多参考请参考:Android - Setting a Timeout for an AsyncTask?

【讨论】:

  • 但我不想让异步任务超时,我只想在一段时间后绕过它。
猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 2014-03-18
  • 1970-01-01
  • 2013-02-10
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多