¿Por qué mi servicio bloquea la interfaz de usuario?

Creé un servicio (servicio B) de Actividad (Actividad A). Y desde el servicio B, creé otro servicio (servicio C). Anteriormente el servicio C solía ser un hilo no un servicio. Ya que tiene problemas en el largo plazo lo cambié a un servicio. El servicio C ejecuta un bucle while con 3 segundos llamadas Thread.sleep. Pero la condición general no se detiene. El registro muestra que el servicio se está ejecutando. Pero la interfaz de usuario está bloqueado y después de pocos minutos el sistema me pregunta si cerrar.

¿Cómo hacer que este servicio no bloquee la llamada?

De la documentación de servicio en Android

Un servicio no es un proceso separado. El objeto de servicio en sí no implica que se ejecuta en su propio proceso; A menos que se especifique lo contrario, se ejecuta en el mismo proceso que la aplicación de la que forma parte.

Un servicio no es un hilo. No es un medio por sí mismo para hacer el trabajo fuera del hilo principal (para evitar la aplicación no responde errores).

La mejor manera en este caso es iniciar un nuevo hilo y luego llamar a un servicio desde allí.

Creo que el servicio C se está ejecutando en el hilo principal, trate de crear otro hilo (nuevo hilo o asynctask)

Sí, de la documentación, está claro que los servicios no son procesos separados. En su lugar, sigue a continuación para que funcione:

  1. Inicie un servicio desde donde desee iniciar
  2. En la clase de servicio que escribiste, escribe otra clase privada que extiende el hilo que se asegurará de que todas tus cosas de fondo se ejecutarán en un hilo de fondo que está separado de un proceso de correo
  3. Inicie un subproceso del método onCreate de la clase de servicio. Si inicia su trabajo de fondo en onStartCommand, puede iniciar accidentalmente varios servicios haciendo la misma tarea. Ex. Has dado un botón en tu actividad que iniciará el servicio de fondo. Y si le sucede a hacer clic en él varias veces, se iniciará el número de muchos de servicios en el fondo.

    Por lo tanto, si utiliza el método override onCreate del servicio, comprobará si el servicio ya se está ejecutando o no y si no se está ejecutando, se iniciará el servicio. De lo contrario saltará y no iniciará otro servicio.

Los servicios siempre se ejecutan en el hilo principal. Necesita generar un hilo de fondo o ejecutar repetidamente un TimerTask etc. en su Servicio C para evitar bloquear el subproceso de UI.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.