android - Android平台中的Service vs IntentService

标签 android multithreading android-service android-intentservice

我正在寻找一个可以用 IntentService 完成而不能用 Service 完成的示例(反之亦然)?

我也相信 IntentService 在不同的线程中运行,而 Service 不会。所以,据我所知,在它自己的线程中启动一个服务就像启动一个IntentService。对吗?

最佳答案

Tejas Lagvankar 写了一篇不错的 post关于这个话题。 以下是 Service 和 IntentService 之间的一些主要区别。

何时使用?

  • Service 可以在没有 UI 的任务中使用,但不能太长。如果需要执行较长的任务,则必须在 Service 中使用线程。

  • IntentService 可用于通常不与主线程通信的长任务。如果需要通信,可以使用主线程处理程序或广播 Intent 。另一种使用情况是需要回调时( Intent 触发的任务)。

如何触发?

  • Service是通过调用startService()方法触发的。

  • IntentService 使用 Intent 触发,它产生一个新的工作线程,并在该线程上调用方法 onHandleIntent()

触发自

  • ServiceIntentService 可以从任何线程、 Activity 或其他应用程序组件触发。

运行时

  • Service 在后台运行,但在应用程序的主线程上运行。

  • IntentService 在单独的工作线程上运行。

限制/缺点

  • Service 可能会阻塞应用程序的主线程。

  • IntentService 不能并行运行任务。因此,所有连续的 Intent 都将进入工作线程的消息队列并按顺序执行。

什么时候停止?

  • 如果你实现了一个Service,你有责任通过调用stopSelf()stopService在服务完成时停止它()。 (如果只想提供绑定(bind),则不需要实现该方法)。

  • IntentService 在处理完所有启动请求后停止服务,因此您无需调用 stopSelf()

关于android - Android平台中的Service vs IntentService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524280/

相关文章:

android - 在没有 BluetoothGATT 的情况下断开 BluetoothDevice

android - 无法从 AsyncThread 设置 ListView 适配器

android - 如何让我的广播接收器保持活力

android - 从自定义服务使用 FingerprintService

android - 为什么我得到的手机和 SD 卡内存信息不正确?

android - MediaPlayer mOnPreparedListener 为空

multithreading - Perl:在线程之间共享复杂的数据结构

c# - 多线程加载xml文件到内存

c# - 如何取消 RestSharp 同步 execute() 调用?

android - 网络连接可以在省电模式下停止,并出现 java.net.SocketTimeoutException