问题 关于IntentService的进一步说明


我试图达到目的 IntentService,什么时候应该使用它?

我尝试从API中了解,但没有足够的细节。

这个和在工作线程上运行长任务有什么类比吗?

我将使用的任何进一步解释和样本 IntentService 非常欢迎。

谢谢,

射线。


5550
2018-06-15 13:25


起源



答案:


这和之间有什么比喻吗?   在工作线程上运行长任务?

IntentService 为你处理线程。

我应该什么时候使用它?

一些用例:

  • 用于处理由触发的警报 AlarmManager
  • 用于处理由清单注册的其他事件 BroadcastReceiver
  • 用于处理由app小部件触发的事件(基于时间的更新,按钮点击等)

13
2018-06-15 14:04



为什么我最好使用IntentService“处理由AlarmManager / manifest-registered BroadcastReceiver触发的警报”,它可以做什么常规服务无法做到? - rayman
@rayman:它为你处理后台线程和工作队列。 - CommonsWare
我想我明白了,但mybe你知道我可以检查一些例子,所以我可以看到使用它之间的轻微差异吗?谢谢。 - rayman
@rayman: github.com/commonsguy/cw-andtutorials/tree/master/...  github.com/commonsguy/cwac-wakeful - CommonsWare
马克一如既往地简单而精彩的回答。一个问题,我们可以使用吗? IntentService 作为我所有网络相关任务的线程管理器,而不是上面提到的点? - Aman Alam


答案:


这和之间有什么比喻吗?   在工作线程上运行长任务?

IntentService 为你处理线程。

我应该什么时候使用它?

一些用例:

  • 用于处理由触发的警报 AlarmManager
  • 用于处理由清单注册的其他事件 BroadcastReceiver
  • 用于处理由app小部件触发的事件(基于时间的更新,按钮点击等)

13
2018-06-15 14:04



为什么我最好使用IntentService“处理由AlarmManager / manifest-registered BroadcastReceiver触发的警报”,它可以做什么常规服务无法做到? - rayman
@rayman:它为你处理后台线程和工作队列。 - CommonsWare
我想我明白了,但mybe你知道我可以检查一些例子,所以我可以看到使用它之间的轻微差异吗?谢谢。 - rayman
@rayman: github.com/commonsguy/cw-andtutorials/tree/master/...  github.com/commonsguy/cwac-wakeful - CommonsWare
马克一如既往地简单而精彩的回答。一个问题,我们可以使用吗? IntentService 作为我所有网络相关任务的线程管理器,而不是上面提到的点? - Aman Alam


Android服务是该平台的主力军。它们允许应用程序运行长时间运行的任务并为外部应用程序提供功能不幸的是,由于它们在后台运行并且对于开发人员而言在视觉上并不明显,因此它们可能成为主要问题的根源。如果您已经看到ANR(活动没有响应)或者想知道服务运行的原因何时不应该运行,那么实施不当的服务可能就是问题所在。

可怕的ANR 我们来看看服务导致的两个主​​要错误: ANR次数。这些会破坏用户的体验并为用户提供强制关闭的选项。这可能导致用户卸载您的应用或后台进程处于中断状态。这样做的原因是服务是从您的调用线程启动的 - 通常这是UI线程。 始终运行服务。虽然Android提供了调度和停止服务的机制,但并非所有开发人员都遵循这些准则。事实上,我见过的很多例子甚至没有提到停止你的服务。这可能导致整体性能降低,用户混淆和电池耗尽。 我想谷歌的Android开发人员认为这已成为一个问题,并在Android 1.5中引入了IntentService类。 IntentService类解决了上述问题,并抽象了开发人员停止的所有线程和服务管理。从应用程序的主线程卸载任务是非常简单和强大的方法。


2
2018-05-10 08:32





每当用例是一个需要很长时间但具有常规结束的特定任务时,我会使用它。例如,上面拼写的用例以及诸如以下常规任务: -syncing - 下载资源 - 从各种来源中提取数据并存储它们

当服务在本质上长期运行并且没有明确的结束时,我不建议使用它。我已经看到这样做了,这是一个错误,因为人们最终解决IntentService自行停止这一事实的方式是创建锁以保持handleIntent完成或者如果他们不想阻止下一行请求,他们将通过再次向自己发送startService来重新启动自己。这是非常糟糕的,对于这些类型的场景,你应该只使用一个长期运行的常规Android服务,并确保它绑定(可能是AUTO_CREATE)并处理主线程的工作。


0
2017-11-12 22:32