我在寻找一个例子,说明IntentService可以做的事情,而Service不能做(反之亦然)?

我也相信IntentService在不同的线程中运行,而Service则不在.所以,在我看来,在自己的线程中启动服务就像启动IntentService.对吗?

推荐答案

Tejas Lagvankar写了一篇关于这个主题的优秀post篇文章.

When to use?

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

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

How to trigger?

  • Service通过调用方法startService()触发.

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

Triggered From

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

Runs On

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

  • IntentService在一个单独的工作线程上运行.

Limitations / Drawbacks

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

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

When to stop?

  • 如果您实现了Service,则您有责任在服务完成后通过拨打stopSelf()stopService()来停止服务.(如果您只想提供绑定,则不需要实现此方法).

  • IntentService在处理完所有启动请求后停止服务,因此您不必拨打stopSelf().

Android相关问答推荐

将动作传递给嵌套的可组合物

ArrayList.remove()(Kotlin中的removeAt())导致奇怪的IndexOutOfBoundsResponse异常

如何在Jetpack Compose中使用Box Composable来实现这种布局?

StateFlow集合AsState没有更新他的值Jetpack Compose导航

Jetpack创作动画断断续续变化的观点

Kotlin为多个控件设置一个侦听器

如何使用其他组件的位置来定位自定义弹出窗口

Android Kotlin - 计费 - 从应用内购买获取productId

升级到 Jetpack Compose 物料 list 2023.08.00 需要我将 targetSdk 更改为 34

将输出写入已发布的 Android 应用程序中的日志(log)文件?

有没有办法迭代类型安全的项目访问器?

Jetpack Compose 中的用户在线指示器

Jetpack Compose 绘制范围内的动画

Jetpack Compose with Paging 3 发出太多网络请求

安卓模拟器打不开

是否可以在 Kotlin 中为 mutableStateOf() 设置自定义设置器

Gradle 构建错误:找不到 semver4j-0.16.4-nodeps.jar

firebase-messaging和firebase-inappmessaging-display之间有什么区别?

Jetpack Compose:对角拆分卡片并将内容放入其中

如何在 Kotlin 的片段中制作图像列表?