最多运行一次IntentService一次
问题描述:
我有一个IntentService
,我希望startCommand
只有在它尚未运行时才会被调用。最多运行一次IntentService一次
原因是此服务正在处理数据库中的所有现有行。它可以被调用启动多次,但如果它已经运行,它不应该再次启动。并且在没有要处理的行之后类似于IntentService
,它应该自行关闭。
这是可以实现的吗?也许与PendingIntent
和FLAG_NO_CREATE
?
我可以用Service
和一个单独的线程而不是IntentService
来创建这个,但IntentService
已经有了该线程的实现。
答
也许与PendingIntent和FLAG_NO_CREATE?
该标志是指创建PendingIntent
,而不是服务。
这是可以实现的吗?
即兴:
第1步:在您的服务,增加一个AtomicBoolean
场(这里称为isRunning
),初始设置为false
。
步骤#2:重写onStartCommand()
。如果isRunning
是false
,则将其设置为true
并链接到super.onStartCommand()
以继承正常的IntentService
行为。如果isRunning
是true
,请不要链接到super.onStartCommand()
。
第3步:在onHandleIntent()
,包裹在try
/finally
块,在那里你在finally
设置isRunning
到false
所有的工作。
净:如果onHandleIntent()
尚未运行,则调用将仅经过正常的IntentService
处理。
谢谢! Ohhhh很好!技巧是有选择地调用基类'IntentService'实现... –
所以我不需要'PendingIntent'我只需要调用'startService(intent)'? –
@DonBox:如果你想自己启动一个服务,调用'startService()'。当你想要*别的东西*开始你的服务时(例如'AlarmManager','Notification'),你可以使用'PendingIntent'。 – CommonsWare