usando tutorial studio manager jobscheduler example ejemplo cancel alarma android widget android-service alarmmanager android-handler

android - studio - tutorial alarmmanager



AlarmManager vs Handler.postDelayed (3)

Encontré esta nota en el sitio del desarrollador de Android:

http://developer.android.com/training/scheduling/alarms.html

Parece que AlarmManager sería la clase a usar para iniciar servicios.

Con respecto a Handlers declara que:

"Para las operaciones de sincronización que se garantiza que ocurrirán durante la vida útil de su aplicación, en su lugar considere usar la clase Handler junto con Timer and Thread. Este enfoque le da a Android un mejor control sobre los recursos del sistema".

En un servicio qué método de ejecución retrasada se utilizará handler.postdelayed o Alarmmanager. ¿Cuáles son los pro y los contras?

Tengo 2 servicios (a) que procesan en segundo plano y actualiza la interfaz de usuario a través de un mensaje boradcast (b) que hace algunos cálculos y actualiza el widget de pantalla de inicio cada 5 segundos.

Gracias


Sugeriría que hagas esto con RxJava. En jus algunas líneas podrá manejar retrasos y no tener que preocuparse por los controladores y cancelar esto. Esto también le ahorraría mucho tiempo si tiene que crear múltiples manejadores.

Esto creará un suscriptor que invocará onNext () del intervalSubscriber cuando se observe que este suscriptor está suscrito para emitir algo.

// Set up a subscriber once. Setting up the subscriber private Subscriber<Long> intervalSubscriber = new Subscriber<Long> () { @Override public void onCompleted() { //Wrap up things as onCompleted is called once onNext() is over } @Override public void onError(Throwable e) { //Keep an eye open for this. If onCompleted is not called, it means onError has been called. Make sure to override this method } @Override public void onNext(Long aLong) { // aLong will be from 0 to 1000 // Yuor code logic goes here // If you want to run this code just once, just add a counter and call onComplete when the counter runs the first time } }

Vamos con crear el observable que emitirá.

//Setting up the Observable. This will make runThisOnInterval observable emit every 5 seconds on Computation Threadpool created and managed by RxJava. private Observable<Long> runThisOnInterval = Observable.interval(5000, TimeUnit.MILLISECONDS, Schedulers.computation());

Bien, entonces estamos listos ahora. Todo lo que tenemos que hacer ahora es suscribir intervalSubscriber to runThisOnInterval observable para que el observable pueda comenzar a producir y el suscriptor pueda consumir.

La simple llamada a subscribe() iniciará las emisiones y NO se realiza en el hilo principal, lo que me da mucha flexibilidad.

runThisOnInterval.subscribe(intervalSubscriber);


La diferencia entre AlarmManager y Handler es que AlarmManager se ejecutará incluso cuando el dispositivo esté en modo de suspensión, pero el manejador no lo hará. Otro punto a tener en cuenta es que AlarmManager consumirá más batería porque despertará la CPU y otros chips.

Como entiendo su pregunta, tiene que hacer algunas tareas en segundo plano, incluso cuando el dispositivo está en modo de suspensión, tiene que usar AlarmManager. Intente mantener la duración lo más baja posible para que no agote la batería. Puede iniciar su alarma como InExact() con REAL_TIME tipo alarma.

Puede consultar los siguientes enlaces para su referencia.

AlarmManager

Mejores prácticas para mantener el dispositivo despierto