IntentService 的 START_STICKY
Posted
技术标签:
【中文标题】IntentService 的 START_STICKY【英文标题】:START_STICKY for IntentService 【发布时间】:2014-08-23 14:37:59 【问题描述】:我见过很多 android 服务示例,其中 return START_STICKY 用于在启动时启动应用程序,但无论如何我可以将其用于 IntentService。我了解 Service 方法在主 UI 线程上运行,而 IntentService 作为单独的线程运行。
但是它们究竟如何被调用以及为什么不能在启动时启动 IntentService。由于 IntentService 在单独的线程上运行,因此如果我没有佩戴,我们可以对其进行更多控制。
我尝试在 IntentService 中使用 onStartCommand,但我的应用程序在启动时崩溃,即使它在手动启动时运行良好。我们可以覆盖 IntentService 中的 onStartCommand 吗?
有人可以帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:在启动时运行和START_STICKY
彼此无关 - START_STICKY
是一个标志,用于确定如果您的服务被 Android 杀死会发生什么。
IntentService
旨在处理传入的意图(通过handleIntent
)并在之后立即停止。正如在source of IntentService 中看到的,它已经适当地处理了onStartCommand
。
只要你提出要求
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
并在您的IntentService
上使用正确的意图过滤器:
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
然后您的服务将在启动完成时被调用。
(一个例外情况是,如果您的应用程序按照install location 安装在 SD 卡上)
【讨论】:
以上是关于IntentService 的 START_STICKY的主要内容,如果未能解决你的问题,请参考以下文章