2010-08-22 17 views
3

Je développe un AppWidget Android pour mon application. Pour mettre à jour mon application, j'ai besoin de télécharger des données du réseau. Mais quand j'essaye de faire cela dans la méthode onUpdate, mon appWidget est tué par le système Android. J'ai appris que les opérations fastidieuses ne peuvent pas être effectuées dans les récepteurs, j'ai donc lancé un service à partir de la méthode onUpdate et lancé un thread à partir de cela. Mais le problème persiste toujours. Quelqu'un peut-il s'il vous plaît laissez-moi savoir comment faire des opérations réseau dans Appwidget?Android: opérations réseau dans Appwidget

Répondre

3

Déléguez le travail de téléchargement à un service, probablement un IntentService, éventuellement un WakefulIntentService, selon qu'il existe un risque que l'appareil s'endorme pendant le travail lui-même.

Votre AppWidgetProvider serait tout simplement appeler startService() sur votre IntentService.

Votre IntentService'sonHandleIntent() méthode ferait le travail que vous avez actuellement en onUpdate(), obtenir son propre AppWidgetManager via la méthode getInstance() statique. Mais, puisque onHandleIntent() est exécuté sur un thread d'arrière-plan, vous pouvez prendre autant de temps que vous le souhaitez. Le IntentService s'arrêtera automatiquement une fois que toutes les demandes de travail en suspens auront été effectuées.

+0

mais comment combiner cela avec l'utilisation de RemoteViewsService? Est-ce que IntentService mentionné devrait démarrer RemoteViewsService après l'opération asynchrone? – Malachiasz

+0

@Malachiasz: "Est-ce que IntentService devrait démarrer RemoteViewsService après l'exécution de l'opération async?" -- non. 'RemoteViewsService' sera automatiquement utilisé par le framework de widget d'application. Vous devez vous assurer que 'RemoteViewsService' est conscient des changements de données effectués par' IntentService', comme par exemple par 'IntentService' mettant à jour une base de données dont RemoteViewsService doit tirer. Il devrait y avoir un moyen d'obtenir que le widget de l'application recharge ensuite ses vues à partir de 'RemoteViewsService', bien que je n'ai pas fait de recherches sur ce sujet et que je ne sache pas très bien comment cela se fait. – CommonsWare