2013-10-07 53 views
1

我正在嘗試在Android中使用服務。我的應用程序現在可以啓動我的服務,但是當服務在後臺運行並啓動我的(主)活動時,服務將重新啓動(將調用onCreate()onStartCommand()命令)。在我的MainActivity我檢查,如果該服務已通過以下代碼運行:開始活動時重新啓動服務

if (isServiceRunning()){ 
     System.out.println("De serice is running"); 
    } 
    else{ 
     System.out.println("De service is niet running"); 
     startService(new Intent(this, YourService.class)); 
    } 
... 
private boolean isServiceRunning() { 
    ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     Log.d("services", service.service.getClassName()); 
     if ("com.vandervoorden.mijncijfers.YourService".equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

當我的服務正在運行的「德的貢獻莫過於正在運行」顯示在我的控制檯。

爲什麼在調用onCreate()onStartCommand()時我自己沒有重新啓動服務?如何確保服務在啓動時不會啓動兩次?

編輯1 2013年10月7日下午8點54分:

我的服務類:

public class YourService extends Service 
{ 
    Alarm alarm = new Alarm(); 

    public void onCreate() 
    { 
     super.onCreate(); 
     System.out.println("service: onCreate"); 
    } 


    public int onStartCommand(Intent intent, int flags, int startId) { 
     //alarm.SetAlarm(this); 
     System.out.println("service: onStartCommand"); 
     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) 
    { 
     return null; 
    } 
} 

回答

2

這種行爲看起來只有當你確定你是不是在什麼地方破壞你的服務怪異即使如此,我通常會做的以確保只有一個服務實例正在運行,正在使用一個靜態標誌來標記服務本身,該標誌將跟蹤「onCreate」和「onDestroy」,如果該活動會獨立喜歡開始我的服務我有服務本身的驗證。

希望這有助於。

問候!