¿Cuál es Better ScheduledExecutorService o AlarmManager en android?
Soy un principiante y estoy desarrollando una aplicación de Android que seguirá enviando SMS al usuario después de un cierto retraso (que es en días). Quiero que el usuario una vez registrado debe recibir el SMS, independientemente del hecho de que está conectado En o no. El contenido de SMS y el número de móvil se obtienen de la base de datos.Así que después de investigar encontré dos formas
-
ScheduledExecutorService
- AlarmManager y BroadcastReceiver en lugar de servicio - ¿es eso malo? (Se acabó el tiempo)
- Recuperar el código de solicitud de la emisión de radio de alarma
- SharedPreferences en BroadcastReceiver parece no actualizar?
- ¿Cuál es el mejor método para ejecutar una tarea repetidamente en android? (Ej .: - Actualización de puntajes, Actualización Ui)
- Cancelación automática de la notificación en un momento determinado
-
AlarmManager
El problema es que alarmManager se apagará cuando el teléfono esté apagado o reiniciado. ¿Es este el caso con ScheduledExecutorService también? ¿Y cuántos hilos debo utilizar en el ThreadPool mientras uso el servicio de Executor?
- ¿Alarm Manager persiste incluso después del reinicio?
- ¿Cómo depurar qué alarmas de AlarmManager se están ejecutando desde su aplicación?
- Establecer la alarma de Android 4.4 Kitkat
- ¿Cómo crear different pendingintent para que filterEquals () devuelva false?
- ¿Cómo asegurarse de que AlarmManager se dispara incluso si la aplicación Android está cerrada?
- Milliseconds de Android a la vez
- Android Studio establece una alarma exacta con Icono
- Android PendingIntent FLAG_NO_CREATE no devuelve null
Administrador de alarmas
El Administrador de Alarma tiene un bloqueo de la onReceive()
CPU siempre y cuando el método onReceive()
del receptor de alarma esté ejecutándose. Esto garantiza que el teléfono no se parará hasta que haya terminado de manejar la emisión. Una vez que onReceive()
devuelve, el Administrador de Alarma libera este bloqueo de despertador. Esto significa que, en algunos casos, el teléfono se dormirá tan pronto como se onReceive()
método onReceive()
. Si su receptor de alarma llamó Context.startService()
, es posible que el teléfono se detenga antes de que se inicie el servicio solicitado. Para evitar esto, su BroadcastReceiver
y Service necesitarán implementar una política de bloqueo de la sesión independiente para asegurar que el teléfono continúe funcionando hasta que el servicio esté disponible.
ProgramadoThreadPoolExecutor.
Puede utilizar java.util.Timer or ScheduledThreadPoolExecutor
(preferido) para programar una acción que se produzca a intervalos regulares en un subproceso de fondo.
A continuación, se muestra una muestra que utiliza este último:
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate (new Runnable() { public void run() { // call service } }, 0, 10, TimeUnit.MINUTES);
Así que preferí ScheduledExecutorService
Pero si las actualizaciones se producirán mientras su aplicación se está ejecutando, puede utilizar un temporizador, como se sugiere en otras respuestas, o la más reciente ScheduledThreadPoolExecutor. Si su aplicación se actualiza incluso cuando no está en ejecución, debe ir con el AlarmManager.
El Administrador de alarmas está diseñado para casos en los que desea que el código de la aplicación se ejecute en un momento específico, incluso si su aplicación no se está ejecutando actualmente.
Tome en cuenta que si usted planea actualizar cuando su aplicación está apagada, una vez cada diez minutos es bastante frecuente, y por lo tanto, posiblemente un poco de consumo de energía.
También echa un vistazo a este post.
- Icono de notificación push de Airship urbano en Android 4.4 superior con PhoneGap
- Vista del adaptador dinámico con un tamaño de columna irregular o Horizontal StaggeredGridView