Как использовать "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();