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