gpt4 book ai didi

android - 具有 Intent 操作的 onStartCommand 与绑定(bind)服务

转载 作者:太空狗 更新时间:2023-10-29 13:31:20 26 4
gpt4 key购买 nike

如果我与服务交互的方式是单向的(即只调用服务做某事而不要求结果)。这两种方法之间的区别是什么:

  1. startService(intent)onStartCommand 做任务依赖于 intent.getAction
  2. 绑定(bind)服务并使用 Messenger 向服务发送消息。以便该服务根据消息执行任务。

这是我能想到的一个区别(我不确定):
对于方法 1,我们需要在每次调用 startService 时创建服务,因此重载是我们每次都需要创建服务,除非使用 START_STICKY

最佳答案

有几个区别,但最重要的是线程管理。

Intent 服务如果您使用 Intent 服务,则会在单个守护线程中调用 onHandleIntent。对 startService 的每个新调用都将显示为对 onHandleIntent 的有序、排队的调用。结果是在该守护线程上简单、行为良好、按顺序执行调用。顺便说一句,在队列为空之前服务不会自行停止:不需要“重新创建”

在同一应用中绑定(bind)服务实际上,绑定(bind)服务有两种情况。如果它在您的进程中运行,该服务将在 UI 线程上运行。如果您需要从 UI 线程关闭运行的东西,您将必须构建您自己的线程(可能是 Looper),并因此与 Messenger 对话。结果更加灵活(线程数、排队顺序等由您决定)但与 IntentService 非常相似。

在另一个应用程序中绑定(bind)服务如果 Bound 服务属于不同的应用程序,您对它的调用将在多个 Binder 线程之一上运行。您不需要管理这些线程,它们由框架提供。但是,他们可以乱序执行您的调用。

关于android - 具有 Intent 操作的 onStartCommand 与绑定(bind)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15115407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com