【问题标题】:Android - Running a IntentService multiple timesAndroid - 多次运行 IntentService
【发布时间】:2016-04-18 14:56:38
【问题描述】:
所以我有一个 IntentService 在我运行一次时运行良好。它需要对图像进行操作,然后输出一系列 RGB 值。
但我现在需要它做的是多次运行以批处理出一系列图像。我的第一次尝试涉及在我的主类中调用停止服务,然后创建并运行 IntentService 的新实例。但是当我调用 StopService 时,它崩溃了。
有正确的方法吗?
【问题讨论】:
标签:
android
android-intent
android-intentservice
【解决方案1】:
IntentService 在处理完所有请求后停止服务,因此您无需调用stopSelf()。
IntentService不能并行运行任务,所有连续的intent都会进入消息队列,依次执行。
因此,只需一个接一个地添加它们,并确保清理您的字段以确保独立处理所有 Intent,因为不会重新创建 IntentService 对象/线程。
【解决方案2】:
关于意图服务你必须知道的:
“IntentService 类为在单个后台线程上运行操作提供了一个简单的结构。这允许它处理长时间运行的操作而不会影响用户界面的响应能力。”
不要实现 onStartCommand 方法,因为如果你这样做了,你必须在完成后调用 stopSelf() 或 stopService()。如果您不覆盖此方法,那么 Android 操作系统会处理所有事情。
正如@Radu Ionescu 所说,intentService 停止工作,当所有请求都到达它的 onHandleIntent 方法时。
IntentService 开启时会创建一个默认工作线程,并执行到达 onHandleIntent 方法的所有内容。
只需将所有内容添加到它的队列中,或者如果您需要更长的时间才能添加两个不同的操作,您可以使用 Service,以防止 IntentService 自毁。