2010-08-22 3 views
3

Я разрабатываю Android AppWidget для своего приложения. Для обновления моего приложения мне нужно загрузить данные из сети. Но когда я пытаюсь сделать это в методе onUpdate, мой appWidget убит системой Android. Я узнал, что время выполнения операций не может быть выполнено в приемниках, поэтому я запустил сервис из метода onUpdate и запустил поток из этого. Но проблема все еще сохраняется. Может кто-нибудь, пожалуйста, дайте мне знать, как делать сетевые операции в Appwidget?Android: Сетевые операции в Appwidget

ответ

3

Делегировать загрузку службы, возможно, IntentService, возможно, WakefulIntentService в зависимости от того, существует ли риск, что устройство может засыпать во время самой работы.

Ваш AppWidgetProvider просто позвонит startService() на ваш IntentService.

Ваш IntentService'sonHandleIntent() метод будет делать работу, которую вы в настоящее время есть в onUpdate(), получая свой собственный AppWidgetManager через статический getInstance() метод. Но, поскольку onHandleIntent() выполняется на фоне потока, вы можете взять столько времени, сколько вам нужно. IntentService также автоматически отключится, как только это будет выполнено со всеми выдающимися рабочими запросами.

+0

но как объединить это с использованием RemoteViewsService? Должен ли IntentService запускать RemoteViewsService после выполнения операции async? – Malachiasz

+0

@Malachiasz: «Должен ли упоминаться, что IntentService запускает RemoteViewsService после операции async?» - нет. 'RemoteViewsService' будет автоматически использоваться инфраструктурой виджета приложения. Вы должны убедиться, что «RemoteViewsService» знает о любых изменениях данных, которые были сделаны с помощью «IntentService», например, посредством «IntentService», обновляющего базу данных, из которой необходимо удалить «RemoteViewsService». Должен быть способ получить виджет приложения, чтобы затем перезагрузить его представления из «RemoteViewsService», хотя я не исследовал это и не знаю, с чего это делается. – CommonsWare

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