Вопрос по service, android – как запретить запуск сервиса, если уже запущен андроид

36

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

Ваш Ответ

4   ответа
74

startService(Intent) многократно

Ты получишьonStartCommand() в сервисе. Так что имейте это в виду

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

В:http: //developer.android.com/reference/android/app/Service.htm по теме: Сервисный цикл

Спасибо за ваш быстрый ответ. Ваш комментарий мне очень поможет, но я не хочу снова вызывать эти методы, если служба запущен Atul Bhardwaj
@ AtulBhardwaj: звонки наstartService() всегд курокonStartComand(). Период. Так что, либо не звониstartService() или умнееonStartCommand() это может быть вызвано вызовом несколько раз. CommonsWare
19

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

это правильный ответ. onCreate () игнорируется. likejudo
7

при начале звонка:

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; 
        }
Этот код работает только в том случае, если я связываю службу с действием ??? Я думаю, что привязка службы к действию будет работать до тех пор, пока приложение не будет запущен Atul Bhardwaj
Это не всегда будет работать. Он не принимает во внимание «Служба остановлена». И это в основном для отображения пользовательского интерфейса Running Services. Я использовал это, и это не будет работать в KitKat всегда. Скорее, вы можете использовать startService ВСЕГДА и использовать сервис onCreate и onStartCommand для выполнения ваших задач. Это правильный путь. Bharath Mg
Почему это Связанная служба здесь нужно? Разве мы не можем просто использовать Запущенный Сервис? IgorGanapolsky
1

система Android вызывает метод onStartCommand () службы. И если сервис еще не запущен, система сначала вызывает onCreate (), а затем вызывает onStartCommand ().

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

Похожие вопросы