2013-10-07 4 views
1

Я пытаюсь получить Службы, работающие в Android. Мое приложение может запустить мою службу сейчас, но когда служба работает в фоновом режиме, и я запускаю свою (основную) активность, служба перезапустится (вызовы будут вызываться команды и 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; 
} 

Когда моя служба работает «De serice работает» показан на моей консоли.

Почему onCreate() и onStartCommand() вызываются, когда я не перезапускал сервис самостоятельно? Как я могу убедиться, что служба не запускается дважды, когда она уже запущена?

EDIT 1 2013-10-07 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», таким образом, независимо, если активность будет Как начать мой сервис, у меня есть валидации в самой службе.

Надеюсь, что это поможет.

С уважением!

Смежные вопросы