【问题标题】:Does code in onHandleIntent block IntentService from receiving other intents?onHandleIntent 中的代码是否会阻止 IntentService 接收其他意图?
【发布时间】:2014-04-24 14:41:30
【问题描述】:

我有一个IntentService,它连接到蓝牙(阻塞部分)、发送数据并断开连接。我已修改 IntentService 以处理将停止服务的特殊意图。但是,似乎由于连接到蓝牙设备的阻塞代码(无限期或直到用户按预期取消),在代码的阻塞部分不再阻塞之前不会调用覆盖的 onStart 或 onStartCommand。

onHandleIntent 中的代码是否会阻止其他意图到达服务?

【问题讨论】:

    标签: android service bluetooth blocking intentservice


    【解决方案1】:

    是的。 IntentService 使用单个工作线程。

    或者准确引用文档:

    所有请求都在单个工作线程上处理——它们可能被视为 只要有必要(并且不会阻塞应用程序的主循环), 但一次只会处理一个请求。

    来自https://developer.android.com/reference/android/app/IntentService.html

    这意味着在 IntentService 上一次只能调用一次onStartCommand

    【讨论】:

    • 就我而言,应用程序只有在建立连接后才能发送数据。在 onHandleIntent 内部有一个连接线程会被认为是一种正常的做法,它将向 Handler 发送一条消息,其中包含 go 或 no-go 消息?像这样pastebin.com/9BuSPNv4
    • 不,如果您使用的是 IntentService,那么您不应该在其中启动自己的线程。或者更确切地说,听起来你真正想要使用的是一个普通的服务,并在那里启动你自己的工作线程,使用你想要的任何东西(AsyncTask、HandlerThread、Executor 等)
    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 2015-11-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多