Intereting Posts
Как проделать изображения Spinner onItemSelected () выполняется, когда не предполагается Как установить приложение в систему / приложение при разработке из студии Android Установите приложение на устройство genymotion, выполните: «INSTALL_FAILED_CPU_ABI_INCOMPATIBLE» Проблемы с ActionBarSherlock getMenuInflater ACCESS_FINE_LOCATION SecurityException, несмотря на указание разрешения в файле манифеста ADT не позволит создавать Android-активность Как отключить / снова включить вибрацию, возникающую при получении уведомления? Приложение Android с помощью Webview / javascript. Что может быть проблемой безопасности? Android onViewClickListener не работает Тема Google Maps для Android Как узнать, что обнаруженное лицо является реальным или поддельным Как установить часть текста в жирный шрифт при использовании AlertDialog.setMessage () в Android? Что такое параметр «label» в ClipData на Android? Как увеличить пространство между элементами в linearlayout в android?

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