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

фон

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

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

проблема

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

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

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

вопрос

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

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

1 ответов


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

использовать goAsync() Если вы хотите передать обработку внутри вашего BroadcastReceiver ' s onReceive() метод в другом потоке. The 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();