2017-02-10 79 views
0

我有一个IntentService,我希望startCommand只有在它尚未运行时才会被调用。最多运行一次IntentService一次

原因是此服务正在处理数据库中的所有现有行。它可以被调用启动多次,但如果它已经运行,它不应该再次启动。并且在没有要处理的行之后类似于IntentService,它应该自行关闭。

这是可以实现的吗?也许与PendingIntentFLAG_NO_CREATE

我可以用Service和一个单独的线程而不是IntentService来创建这个,但IntentService已经有了该线程的实现。

回答

1

也许与PendingIntent和FLAG_NO_CREATE?

该标志是指创建PendingIntent,而不是服务。

这是可以实现的吗?

即兴:

第1步:在您的服务,增加一个AtomicBoolean场(这里称为isRunning),初始设置为false

步骤#2:重写onStartCommand()。如果isRunningfalse,则将其设置为true并链接到super.onStartCommand()以继承正常的IntentService行为。如果isRunningtrue,请不要链接到super.onStartCommand()

第3步:在onHandleIntent(),包裹在try/finally块,在那里你在finally设置isRunningfalse所有的工作。

净:如果onHandleIntent()尚未运行,则调用将仅经过正常的IntentService处理。

+0

谢谢! Ohhhh很好!技巧是有选择地调用基类'IntentService'实现... –

+0

所以我不需要'PendingIntent'我只需要调用'startService(intent)'? –

+1

@DonBox:如果你想自己启动一个服务,调用'startService()'。当你想要*别的东西*开始你的服务时(例如'AlarmManager','Notification'),你可以使用'PendingIntent'。 – CommonsWare