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