Как использовать «goAsync» для broadcastReceiver?

Задний план

Начиная с Honeycomb (API 11), у Android есть функция, позволяющая широковещательному радиоприемнику работать с асинхронным способом, предоставляя ему около 10 секунд, прежде чем он предположит, что он может убить свой процесс, используя метод « goAsync »:

Это можно вызвать приложением в onReceive (Context, Intent), чтобы он мог поддерживать широковещательную передачу активным после возвращения из этой функции. Это не меняет ожиданий относительно реагировать на трансляцию (заканчивая ее в течение 10 секунд), но позволяет реализации перемещать работу, связанную с ней, на другой поток, чтобы избежать срыва основного потока пользовательского интерфейса из-за диска IO.

Проблема

Я искал во многих местах и ​​не нашел ни одного примера или учебника о том, как его использовать.

Не только это, но метод возвращает экземпляр PendingIntent, который я не уверен, что с ним делать:

Возвращает BroadcastReceiver.PendingResult, представляющий результат активной трансляции. Сам BroadcastRecord больше не активен; Все данные и другое взаимодействие должны проходить через API BroadcastReceiver.PendingResult. Метод PendingResult.finish () должен быть вызван после завершения обработки трансляции.

Вопрос

Как вы используете этот метод?

Что ожидает от него PendingIntent, и что мне с ним делать?

Solutions Collecting From Web of "Как использовать «goAsync» для broadcastReceiver?"

Здесь вы можете найти краткое объяснение.

Используйте goAsync() если вы хотите goAsync() обработку внутри вашего метода onReceive() BroadcastReceiver в другой поток. Затем может быть закончен метод onReceive() . PendingResult передается в новый поток, и вы должны вызвать PendingResult.finish() чтобы фактически сообщить системе, что этот ресивер может быть переработан.

Например:

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