【问题标题】:What can be happen if I use AsyncTask in IntentService?如果我在 IntentService 中使用 AsyncTask 会发生什么?
【发布时间】:2014-09-29 12:32:00
【问题描述】:

我想知道。当我在 IntentService 中使用 AsyncTask 时会发生什么。

【问题讨论】:

标签: java android android-activity


【解决方案1】:

一旦onHandleIntent()返回,如果没有更多的工作要做,服务将被销毁。如果AsyncTask 仍在运行,您将泄露该线程。无法保证您的进程将保持足够长的时间运行以使 AsyncTask 完成其工作。

由于IntentService 已经为您提供了一个后台线程——onHandleIntent() 运行的那个——因此不需要另一个后台线程。只需将您的doInBackground() 逻辑放入IntentServiceonHandleIntent()

另外,一般来说,从任何服务中使用AsyncTask 是不必要的,因为服务不需要在主应用程序线程上做任何事情。

【讨论】:

  • 服务中是否有类似的 onPostExecute()
  • @Butterflow: ""服务中有什么类似的 onPostExecute() 吗?" -- 不,因为你很少想在主应用程序线程上明确地在服务中做任何事情。
  • @CommonsWare 如果使用应用程序上下文而不是服务上下文调用 AsyncTask,线程是否也会泄漏?
  • @jmart:是的。在这里,“泄露”意味着没有正在运行的 Android 活动或服务管理线程并让 Android 知道该应用仍在尝试工作。
【解决方案2】:

你可以在intent服务中使用异步任务,它会完美运行。因为,intentService是在没有UI交互的情况下运行后台任务,但一项工作最好不要在intentService中使用异步任务。当你在 intentService 中使用了多个长操作,否则会影响设备

【讨论】:

    【解决方案3】:

    我认为在 IntentService 中执行 AsyncTask 是一个非常糟糕的主意。我在 JobIntentService 中体验过 AsyncTask,它与 IntentService 不同,但它会导致崩溃。只需将代码放在 onHandleIntent() 中的 doInBackground() 中即可。

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多