Explicación del servicio de recepción de Android

Tabla de contenido

La diferencia entre los servicios front-end de Android y los servicios en segundo plano

Servicio de primer plano:

Servicio de fondo:

Resumir:

Actualización del servicio de recepción:

Diferencias y uso entre JobScheduler y WorkManager

android.app.ForegroundServiceStartNotAllowedException: Service.startForeground() ¿Cómo solucionarlo?

Administrador de trabajo


La diferencia entre los servicios front-end de Android y los servicios en segundo plano

En Android, el servicio en primer plano y el servicio en segundo plano son dos tipos diferentes de servicios, tienen algunas diferencias en funciones y tratamiento del sistema.

Servicio de primer plano:

Documentación oficial https://developer.android.com/guide/components/foreground-services

  • Un servicio en primer plano es un servicio visible que muestra una notificación en la barra de estado para informar al usuario que hay un servicio en ejecución.

  • Los servicios en primer plano son útiles cuando se realizan determinadas tareas que requieren el conocimiento o la interacción del usuario, como reproducir música, descargar archivos, etc.

  • Los servicios en primer plano se consideran parte de la experiencia del usuario, por lo que el sistema les dará mayor prioridad y no los cancelará fácilmente.

  • Cuando utilice un servicio en primer plano, debe llamar al método startForeground() para iniciar el servicio y proporcionar una notificación relacionada con el servicio.

  • Cuando utiliza un servicio en primer plano, se debe mostrar una notificación para que el usuario sepa activamente que el servicio se está ejecutando. Esta notificación no se puede descartar a menos que el servicio se detenga o se elimine del primer plano.

Servicio de fondo:

Documentación oficial https://developer.android.com/guide/background#categories_of_background_tasks

  • Un servicio en segundo plano es un servicio que realiza tareas en segundo plano y los usuarios no percibirán directamente su existencia.

  • Los servicios en segundo plano se suelen utilizar para realizar tareas de larga duración que no requieren la interacción del usuario, como sincronización de datos, actualizaciones periódicas, etc.

  • Los servicios en segundo plano tienen una prioridad más baja y el sistema puede finalizar su operación para liberar recursos del sistema cuando los recursos son escasos.

  • Cuando se utiliza un servicio en segundo plano, generalmente se llama al método startService() para iniciar el servicio.

Resumir:

  • Los servicios en primer plano son adecuados para tareas que los usuarios conocen y con las que necesitan interactuar. El sistema tiene mayor prioridad y generalmente se usa para tareas de larga duración.

  • Los servicios en segundo plano son adecuados para tareas que no requieren la interacción y el conocimiento del usuario. El sistema tiene una prioridad baja y puede finalizar su funcionamiento cuando los recursos son escasos.

Cabe señalar que a partir de Android 8.0 (API nivel 26), se introducen restricciones de servicio en segundo plano, es decir, los servicios en segundo plano están sujetos a algunas restricciones al realizar tareas en segundo plano. Al ejecutar tareas en segundo plano, se deben utilizar métodos de ejecución en segundo plano adecuados, como JobScheduler, WorkManager o servicios en primer plano para garantizar la ejecución de tareas y la utilización razonable de los recursos del sistema.

Actualización del servicio de recepción:

A partir de Android 13 (nivel de API 33), los usuarios pueden desactivar las notificaciones asociadas con los servicios en primer plano de forma predeterminada. Para ello, el usuario realiza un gesto de deslizar el dedo sobre la notificación. Tradicionalmente, las notificaciones no se ignoran a menos que el servicio en primer plano se detenga o se elimine del primer plano.

Diferencias y uso entre JobScheduler y WorkManager

JobScheduler y WorkManager son dos herramientas diferentes para programar y ejecutar tareas en segundo plano en Android, tienen algunas diferencias y escenarios aplicables.

Programador de trabajos:

  • JobScheduler es un servicio del sistema para programar tareas proporcionado por Android, introducido a partir de Android 5.0 (API nivel 21).

  • JobScheduler utiliza condiciones flexibles y mecanismos de activación para programar la ejecución de tareas. Las tareas se pueden activar en función de condiciones como la hora, el estado de inactividad del dispositivo, el estado de la conexión de red, etc.

  • JobScheduler es adecuado para tareas en segundo plano que deben retrasarse o ejecutarse periódicamente, como sincronización de datos, operaciones de actualización, etc.

  • JobScheduler tiene un menor consumo de energía y recursos, y el sistema decide automáticamente cuándo ejecutar tareas según las condiciones para ahorrar energía y recursos del sistema.

Ejemplo de uso de JobScheduler:

// 创建JobInfo对象
JobInfo jobInfo = new JobInfo.Builder(JOB_ID, new ComponentName(context, YourJobService.class))
        .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
        .setRequiresCharging(true)
        .build();

// 获取JobScheduler
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);

// 调度任务
jobScheduler.schedule(jobInfo);

Gerente de trabajo:

  • WorkManager es uno de los componentes de Android Jetpack que se utiliza para realizar tareas en segundo plano diferibles, confiables y flexibles, disponible desde Android 5.0 (API nivel 21) y superior.

  • WorkManager proporciona una forma sencilla y potente de manejar tareas en segundo plano, incluida la ejecución retrasada, la ejecución periódica, la ejecución cuando el dispositivo está inactivo, etc.

  • WorkManager proporciona un comportamiento consistente en diferentes versiones de Android, adaptándose automáticamente a los requisitos del sistema y del dispositivo.

  • WorkManager es adecuado para tareas en segundo plano que requieren una ejecución confiable y una finalización garantizada de las tareas, como cargar archivos, enviar notificaciones, etc.

Ejemplo usando WorkManager:

// 创建OneTimeWorkRequest对象
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(YourWorker.class)
        .setConstraints(new Constraints.Builder()
                .setRequiredNetworkType(NetworkType.UNMETERED)
                .setRequiresCharging(true)
                .build())
        .build();

// 调度任务
WorkManager.getInstance(context).enqueue(workRequest);

Resumir:

  • Si necesita un mecanismo de programación de tareas flexible y lo utiliza en Android 5.0 y superior, puede elegir JobScheduler.

  • Si necesita un método confiable de ejecución de tareas en segundo plano entre versiones y utiliza el componente Android Jetpack, puede elegir WorkManager.

  • Para dispositivos con Android inferior a 5.0, puede elegir un método adecuado según sus necesidades, como usar AlarmManager o un servicio en segundo plano personalizado.

Debe elegir una herramienta de programación de tareas en segundo plano adecuada según sus necesidades específicas, la versión de destino y las características funcionales.

android.app.ForegroundServiceStartNotAllowedException: Service.startForeground() ¿Cómo solucionarlo?

En Android 12+, para iniciar un servicio en primer plano en segundo plano, se deben cumplir algunas condiciones adicionales. Por ejemplo, la aplicación debe tener los permisos adecuados o utilizar la API adecuada para solicitar el inicio del servicio en primer plano. Si no se cumplen estas condiciones, se generará una excepción ForegroundServiceStartNotAllowedException.

La solución a esta excepción es considerar el uso de un método de programación de tareas en segundo plano adecuado, como usar WorkManager para reemplazar el servicio en primer plano. WorkManager proporciona un mecanismo confiable de ejecución de tareas en segundo plano que puede adaptarse a Android 5.0 (API nivel 21) y superior, y evita el problema de las limitaciones del servicio en segundo plano.


Administrador de trabajo

Documentación oficial https://developer.android.com/guide/background#categories_of_background_tasks

 

Supongo que te gusta

Origin blog.csdn.net/zyy_give/article/details/131602476
Recomendado
Clasificación