2013-02-04 55 views
1

當我啓動一個服務(IntentService)時,它會調用服務函數的onHandleIntent()。當它正在運行時,如果我再次調用startService(),它將緩存調用,並再次調用onHandleIntent()。實際上,我想要做的是,將一些新數據傳遞給當前正在運行的服務實例,而不創建額外的。 (就像在線程或監聽器中發送信號一樣)。 我該怎麼做? 在我的onHandleIntent()我想使用while(true){....},所以它會永遠運行。如何防止onHandleIntent()的多重調用 - IntentService

回答

1

延長正常服務等級。在您收到的第一個onStartCommand()函數中,啓動具有「while(true){...}」代碼的後臺線程。在之後的onStartCommand()調用中,檢查工作線程是否存在,以及它何時存在,發出信號。

不知道你要使用這項服務,因爲它很難給你任何更好的建議。然而,有些事情需要考慮: - 查看IntentService也使用的Looper/Handler類。它們可以給你一些很好的方式來編寫你的「while(true)」循環,包括信號。 - 請記住,onStartCommand()方法應該在幾秒內返回(它在主線程上運行),所以如果你想交出新的工作(通過onStartCommand傳入的Intent來接收),你應該確保這隻手-off不需要太長時間。 Looper/Handler類也可以幫助你。

1

檢查您的服務是否已啓動,如果沒有啓動它:

private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); 
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if ("com.example.Service".equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 
相關問題