studio sendbroadcast que oreo example español custom android asynchronous broadcastreceiver android-pendingintent

sendbroadcast - broadcastreceiver sms android studio



¿Cómo usar "goAsync" para broadcastReceiver? (1)

Fondo

Comenzando con Honeycomb (API 11), Android tiene una función para permitir que broadcastReceiver se ejecute de forma asíncrona, dándole unos 10 segundos antes de que asuma que puede goAsync su proceso, usando un método llamado " goAsync ":

Esto puede ser llamado por una aplicación en onReceive (Contexto, Intención) para permitirle mantener la transmisión activa después de regresar de esa función. Esto no cambia la expectativa de ser relativamente receptivo a la transmisión (terminándolo dentro de 10 segundos), pero permite que la implementación mueva el trabajo relacionado con él a otro subproceso para evitar interferencias en el subproceso de la interfaz de usuario principal debido a la E / S del disco.

El problema

He buscado en muchos lugares y no encontré ninguna muestra o tutorial de cómo usarlo.

No solo eso, sino que el método devuelve una instancia de PendingIntent que no estoy seguro de qué hacer con ella:

Devuelve un BroadcastReceiver.PendingResult que representa el resultado de la emisión activa. El BroadcastRecord ya no está activo; todos los datos y otras interacciones deben pasar por las API BroadcastReceiver.PendingResult. El método PendingResult.finish () debe llamarse una vez que se realiza el procesamiento de la transmisión.

La pregunta

¿Cómo se utiliza este método?

¿Qué es el PendingIntent que devuelve, y qué debo hacer con él?


Puedes encontrar una breve explicación here .

Use goAsync() si desea transferir el procesamiento dentro del método onReceive() BroadcastReceiver a otro subproceso. El método onReceive() puede ser terminado allí. El PendingResult se pasa al nuevo subproceso y debe llamar a PendingResult.finish() para informar al sistema de que este receptor puede ser reciclado.

Por ejemplo:

final PendingResult result = goAsync(); Thread thread = new Thread() { public void run() { int i; // Do processing result.setResultCode(i); result.finish(); } }; thread.start();