2011-01-10 6 views
8

Я продлеваю BroadcastReceiver, а в onReceive() Я делаю все, что мне нужно.BroadcastReceiver onReceive тайм-аут

onReceive() имеет тайм-аут, из документации:

есть таймаут 10 секунд, что система позволяет, прежде чем рассматривать , чтобы приемник был блокирован и кандидат должен быть убит

Это создает проблему, когда я работаю в режиме отладки. Мне нужно больше 10 секунд (иногда). Если я не буду выполнять всю свою отладку через 10 секунд, мое соединение будет закрыто, и отладка остановится.

Могу ли я увеличить тайм-аут или отключить его для целей отладки?

Спасибо.

+0

Если вы делаете материал, который занимает больше, чем даже часть секунды в вашем широковещательном приемнике, вы делаете это неправильно. – Falmarri

+4

Прочтите мой комментарий ниже. Я говорю о режиме DEBUG. –

ответ

11

Для того, чтобы предотвратить приложение от закрытия силы в то время как вы остановились на точке разрыва во время отладки, попытайтесь установить Инструменты приложения Dev и включить Debug App настройки, которые:

позволяет выберите приложение для отладки. Вам не нужно, чтобы установить это присоединить отладчик, но установка этого значения имеет два эффекта:

  • Это предотвратит Android от метания ошибки, если сделать паузу на точки останова в течение длительного времени, в то время как отладки ,

Все детали здесь: http://developer.android.com/tools/debugging/debugging-devtools.html

Если вы делаете что-то сложное в методе onReceive, а затем рассмотреть вопрос о вашей BroadcastReceiver начать Service и передать данные, которые он получает от в onReceive. Затем Service может выполнять более длительную обработку.

+1

Это правильно. Цель SOLE широковещательного приемника заключается в передаче данных на что-то еще. – Falmarri

+1

Ребята, я согласен с вами. Ты прав. В версии для версии это не должно длиться так долго. Но я говорю в режиме DEBUG, когда я отлаживаю свой код. –

+0

Не имеет значения, что вы находитесь в режиме «DEBUG». Вы по-прежнему хотите, чтобы приемник немедленно передавался другому компоненту, вероятно, рекомендуется использовать службу в качестве лифта.Это правильная конструкция, и будет легче отлаживать и устранять неполадки, а также не вызывать тайм-ауты приемника (выполняете ли вы регистрацию или что-то еще, что занимает больше времени в Сервисе). –

1

Я столкнулся с этой проблемой даже в режиме отладки. Оказывается, что другая передача была отправлена ​​и не обрабатывалась, потому что я отлаживал другую трансляцию в основном потоке. Android рассмотрел мой процесс в ANR и убил весь процесс.

Мне пришлось временно изменить код, чтобы не вызывать другую трансляцию при выполнении моей отладки.

+0

Как вы изменили его? У меня та же проблема. – Para

+0

@Para, я прокомментировал код, который отправил трансляции в разделе, которое я отлаживал, начиная с точки останова. –

Смежные вопросы