2010-08-18 5 views
1

У меня есть приемник для намерения BOOT_COMPLETED, и он запустит службу, вызвав startService с намерением и процессами службы, которые намерены использовать функцию onStartCommand, создавая поток, который выполняет HTTP-сообщение, сервер.Отправка намерений от приемника на обслуживание с задержкой

При включении питания иногда требуется 3-5 секунд, чтобы получить активное соединение с данными на телефоне, когда это произойдет. Служба не выполняет HTTP-сообщение, так как нет соединения для передачи данных. Возможно ли, чтобы Получатель отправил намерение Службе с использованием startService с задержкой.? так что, когда onStartCommand of Service называется подключением данных, готов к публикации данных.

ответ

0

Не можете ли вы использовать асинхронизацию для выполнения HTTP-запроса, а затем, возможно, поймать исключение в асинтете, чтобы проверить исключение таймаута?

Если асинтазары выходят из строя, то изящно возвращаются и заставляют вашу службу порождать новую асинтезу, пока вы не получите соединение?

+0

Скорее всего, HTTP-сообщение не будет работать при включении питания, поэтому требуется отложить публикацию, а не ловить исключение. –

+0

Исправление устаревшего кода, теперь нельзя использовать asyctask. –

+0

Как и в комментарии ниже, создайте рабочий поток, который будет опросить TelephonyManager, а затем отправит обратно обработчику, когда флаг DATA_CONNECTED вернет true. Таким образом, вы не блокируете основной поток службы. – BeRecursive

0

Перед выполнением любых обменов данными сделайте цикл, который будет опросить TelephonyManager Android. getDataState() с экспоненциальным отклонением, чтобы не использовать слишком много процессора или не утилизировать аккумулятор пользователя. Продолжайте пытаться, пока не получите флаг DATA_CONNECTED, или пока не достигнете какого-то таймаута, чтобы остановить попытку.

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