Подтвердить что ты не робот

Как предотвратить повторный запуск службы, если уже запущен андроид

При нажатии кнопки я хочу начать сервис, используя метод startService(new Intent(currentActivity.this,MyService.class)), но если служба запущена, я не хочу вызывать этот метод, чтобы избежать запуска службы, которая уже запущена. Как это возможно. Я использую оба Сервис Intent и Сервис в том же проекте и хотите применить одинаковое условие для обоих.

4b9b3361

Ответ 1

Служба запускается только один раз, поэтому вы можете вызывать startService(Intent) несколько раз.

Вы получите onStartCommand() в службе. Поэтому имейте это в виду.

Источник: Обратите внимание, что несколько вызовов Context.startService() не вложены (хотя они приводят к нескольким соответствующим вызовам на onStartCommand()), поэтому независимо от того, сколько раз он запускается, служба будет остановлена ​​после вызова Context.stopService() или stopSelf(); однако службы могут использовать свой метод stopSelf(int), чтобы гарантировать, что служба не остановлена ​​до тех пор, пока не будут обработаны начатые намерения.

В: http://developer.android.com/reference/android/app/Service.html по теме: Жизненный цикл службы

Ответ 2

Используйте startService(). Start Service вызовет onStartCommand() Если Служба еще не запущена, она вызывается onCreate(). Инициализируйте свои переменные и/или запустите Thread в onCreate().

Ответ 3

Свяжите свое обслуживание; при запуске вызова:

Intent bindIntent = new Intent(this,ServiceTask.class);
    startService(bindIntent);
    bindService(bindIntent,mConnection,0);

Затем, чтобы проверить, работает ли ваша служба, используйте такой метод, как:

    public static boolean isServiceRunning(String serviceClassName){ 
             final ActivityManager activityManager = (ActivityManager)Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);     
             final List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);      
           for (RunningServiceInfo runningServiceInfo : services) {         
             if (runningServiceInfo.service.getClassName().equals(serviceClassName)){             
                return true;         
             }     
           }     
         return false; 
        }

Ответ 4

Всякий раз, когда мы запускаем какую-либо услугу из любой активности, система Android вызывает метод onStartCommand(). Если служба еще не запущена, система сначала вызывает onCreate(), а затем вызывает onStartCommand().

Итак, стоит сказать, что служба Android запускается только один раз в своем жизненном цикле и продолжает работать до остановки. Если любой другой клиент хочет запустить его снова, то будет вызываться только метод onStartCommand().