Al hacer clic en un botón quiero iniciar el servicio utilizando el método startService(new Intent(currentActivity.this,MyService.class))
pero si el servicio se está ejecutando no quiero llamar a este método para evitar ejecutar el servicio que ya se está ejecutando. Cómo es posible. Estoy usando Servicio de intento y Servicio en el mismo proyecto y deseo aplicar la misma condición para ambos.cómo evitar que el servicio se ejecute nuevamente si ya está ejecutando android
Respuesta
Un servicio solo se ejecutará una vez, por lo que puede llamar al startService(Intent)
varias veces.
Recibirá un onStartCommand()
en el servicio. Así que tenlo en mente.
Fuente: Tenga en cuenta que varias llamadas a Context.startService()
no anidan (a pesar de que dan lugar a múltiples llamadas correspondientes a onStartCommand()
), así que no importa cuántas veces se pone en marcha un servicio se detendrá una vez Context.stopService()
o stopSelf()
se llama; sin embargo, los servicios pueden usar su método stopSelf(int)
para asegurar que el servicio no se detenga hasta que los intentos iniciales hayan sido procesados.
A: http://developer.android.com/reference/android/app/Service.html en el tema: Servicio del ciclo de vida
Gracias por su rápida respuesta.Su comentario me ayudará mucho pero no desea volver a llamar a estos métodos si el servicio se está ejecutando. ¿Alguna otra idea? –
@AtulBhardwaj: llamadas a 'startService()' * always * trigger 'onStartComand()'. Período. Por lo tanto, no llame a 'startService()', o tenga un 'onStartCommand()' más inteligente que pueda tratar de ser llamado varias veces. – CommonsWare
@CommonsWare Entender :) –
vincular a su servicio; cuando se inicia la llamada:
Intent bindIntent = new Intent(this,ServiceTask.class);
startService(bindIntent);
bindService(bindIntent,mConnection,0);
A continuación, para comprobar si el servicio está funcionando, utilice un método como:
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;
}
¿Funciona este código solo en caso de que vincule el servicio a la actividad? Creo que el servicio vinculante a una actividad se ejecutará hasta que la aplicación se ejecute. Por favor comente –
Esto no funcionará siempre. No se tiene en cuenta el "Servicio que se detiene". Y es principalmente para mostrar la IU de Running Services. Lo he usado y no funcionará en KitKat siempre. Por el contrario, puede utilizar startService ALWAYS y hacer uso del servicio onCreate y onStartCommand para realizar sus tareas. Es la manera correcta. –
¿Por qué es necesario un ** Bound Service ** aquí? ¿No podemos simplemente usar un ** Servicio iniciado **? –
Uso startService()
. Start Service llamará al onStartCommand()
Si el servicio aún no se inicia llamará al onCreate()
. Inicialice sus variables y/o inicie un subproceso en onCreate()
.
esta es la respuesta correcta. onCreate() se pasa por alto. – likejiujitsu
Cada vez que iniciamos un servicio desde cualquier actividad, el sistema Android llama al método onStartCommand() del servicio Y si el servicio no se está ejecutando, el sistema llama primero a Crear(), y luego llama a StartThat().
Lo que quiero decir es que el inicio del servicio de Android es único una vez en su ciclo de vida y lo mantiene funcionando hasta que se detenga. Si cualquier otro cliente desea reiniciarlo, solo se invocará el método onStartCommand() todo el tiempo.
- 1. comisión si ya se está ejecutando
- 2. ¿Cómo comprobar si una aplicación WPF ya se está ejecutando?
- 3. Descubriendo si la actividad de Android se está ejecutando
- 4. Cómo comprobar si se está ejecutando un Thread de Android
- 5. cómo evitar que Sinatra se ejecute?
- 6. Cómo saber si el servicio se está ejecutando utilizando adb shell en android
- 7. ¿Cómo obtener datos de un servicio que ya se está ejecutando?
- 8. ¿Cancelar una tarea que ya se está ejecutando con Apio?
- 9. Cómo saber si el servidor de emacs se está ejecutando
- 10. ¿Verifica si se está ejecutando un servicio de Windows?
- 11. Android: compruebe si el servicio se está ejecutando a través de. bindService
- 12. ¿Cómo determinar si un servicio de Android se está ejecutando en primer plano?
- 13. PyQt: ¿cómo detectar y cerrar la IU si ya se está ejecutando?
- 14. Si Android se reinicia, un servicio se llama a onCreate nuevamente?
- 15. Comprobar si el proceso se está ejecutando
- 16. Android cómo comprobar si el servicio de intento aún se está ejecutando o si ha dejado de ejecutarse
- 17. ¿Cómo detectar con precisión si un trabajo de SQL Server se está ejecutando y lidiar con el trabajo que ya se está ejecutando?
- 18. evitar que una aplicación C# ejecute más de una instancia
- 19. ¿Cómo verificar si el servidor X se está ejecutando?
- 20. Evitar que el método MVC Action se ejecute si un parámetro es nulo
- 21. Determine si ya se está ejecutando una secuencia de comandos de ruby
- 22. Shell script: Asegúrese de que la secuencia de comandos no se ejecuta si ya se está ejecutando
- 23. ¿Google gson se está ejecutando en android?
- 24. Detectando si ya se está ejecutando otra instancia de la aplicación
- 25. Código publicado accidentalmente para vivir. ¿Cómo evitar que ocurra nuevamente?
- 26. ¿Cómo puedo saber si un proceso ya se está ejecutando usando C#?
- 27. Python: Cómo prohibir la apertura de una aplicación si ya se está ejecutando
- 28. ¿Cómo comprobar si la intención pendiente activada por AlarmManager setRepeating ya se está ejecutando?
- 29. Verificando un proceso php ya se está ejecutando
- 30. ¿Cómo manejar las notificaciones push si la aplicación ya se está ejecutando?
relacionado http://stackoverflow.com/questions/8019899/starting-a-service-multiple-times –