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

Фон

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

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

Проблема

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

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

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

Вопрос

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

Что такое возвращаемый им PendingIntent, и что мне с ним делать?

Ответ 1

Вы можете найти краткое описание здесь.

Используйте goAsync(), если вы хотите передать обработку внутри вашего метода BroadcastReceiver onReceive() в другой поток. Затем может быть закончен метод 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();