2012-12-10 31 views
0

我需要在後臺運行一個服務,而它一直被Android殺死我需要一次又一次地啓動它。由於某些編程目的,我需要知道該服務是否正在運行。那是因爲我將同時啓動第二個服務,並且它將啓動方法保持兩次。Android:我怎麼能知道一個服務正在運行,而它是由AlarmManager啓動的

到目前爲止,我已經試過這樣:

private boolean isServiceRunning() { 
    ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager 
      .getRunningServices(Integer.MAX_VALUE)) { 
     if (NotificationService.class.getName().equals(
       service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

但只要我閱讀時,我的服務已啓動與

startService(Intent); 

這是唯一可能的而且因爲我開始我的服務與AlarmManager每2分鐘,例如我不知道如何檢查服務是否正在運行。也許如果你有一個想法,我可以如何避免兩次或更多的服務啓動方法,我會很滿意。

+0

「我需要在後臺運行一個服務,而它一直由Android打死我需要一次又一次啓動」 - 理想情況下,你會不會嘗試必須在一個永恆的服務第一名。 「那是因爲我將同時啓動第二個服務,並且它會啓動兩次啓動方法」 - 這應該是不可能的,因爲只能有一個運行的服務實例。 – CommonsWare

+0

我認爲你需要得到你發送給接收者的報警號,這是真的嗎? – Talha

+0

爲什麼每兩分鐘開始一次服務?你不能有長時間運行的服務來實現定時功能嗎? – Jayp

回答

0

服務中 onCreate()第一次創建服務時調用方法。 你可以做所有的聲明。

onStartCommand() 

當您嘗試通過警報管理器調用它時,會再次被調用。

如果您希望服務不會被殺死,那麼您可以在不同的進程上運行該服務。爲此,您需要進程間通信(IPC)。

對於這樣做,你的清單文件中聲明的服務如下:

<service 
    android:name="myservice" 
    android:process=":my_process"> 
<service> 

冒號(:) my_process在android:工藝路線告訴android系統的進程名是my_process和:告訴它聲明它的應用程序是私有的。

參考:complete tutorial on services

+0

我試過了您的建議,但服務在超過10分鐘後仍然死亡。我已經開始使用android:process =「:noti_service」的服務,並且它可以工作幾分鐘,然後被殺死。我必須添加一些東西,所以它會繼續運行嗎? – mapodev

相關問題