我有一个 IntentService
,当我单次运行它时它能正常工作。它会处理一张图片并输出一系列的 RGB 值。
但是现在我需要它多次运行以批量处理一系列的图片。我的第一次尝试是在我的主类中调用 StopService 然后创建并运行一个新的 IntentService 实例。但是当我调用 StopService 时它崩溃了。
是否有正确的方法来实现这个需求呢?
我有一个 IntentService
,当我单次运行它时它能正常工作。它会处理一张图片并输出一系列的 RGB 值。
但是现在我需要它多次运行以批量处理一系列的图片。我的第一次尝试是在我的主类中调用 StopService 然后创建并运行一个新的 IntentService 实例。但是当我调用 StopService 时它崩溃了。
是否有正确的方法来实现这个需求呢?
IntentService会在处理完所有请求后停止服务,因此您永远不必调用stopSelf()
。
IntentService无法并行运行任务,所有连续的意图将进入消息队列并按顺序执行。
因此,只需逐个添加它们,并确保清除字段以确保所有意图都独立处理,因为IntentService对象/线程不会被重新创建。
关于IntentService的知识:
"IntentService类提供了一个简单的结构来在单个后台线程上运行操作。这使它能够处理长时间运行的操作,而不影响用户界面的响应性。"
不要实现onStartCommand方法,因为如果你这样做,当完成时,你必须调用stopSelf()或stopService()。如果你不覆盖此方法,则Android OS会处理所有内容。
正如@Radu Ionescu所提到的,IntentService在完成其onHandleIntent方法接收到的所有请求后停止工作。
IntentService通过默认的worker线程创建,并执行到达onHandleIntent方法的所有内容。
只需将所有内容添加到队列中,或者如果需要在添加两个不同的操作之前花费更长的时间,则可以使用Service来防止IntentService自我销毁。