2017-02-10 85 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