Raffraichir le contenu d'une AppWidget

 

Comme déjà indiqué, avant d'expliquer comment maj le contenu d'une AppWidget, une AppWidget ne doit pas devenir un consommateur de ressources systèmes (entre autre énergivore, pensez à la batterie !).

 

L'attribut updatePeriodMillis

Dans le fichier ressource XML créé dans res/xml de votre projet, il y a un attribut: updatePeriodMillis.

Dans l'exemple donné pour expliquer les bases d'un AppWidget, celui-ci était positionné à 0. Ce qui avait pour effet de ne jamais mettre à jour de l'appwidget dans le temps.

 

Une valeur autre va par contre redéclencher un ACTION_APPWIDGET_UPDATE. Il s'agit du temps entre les maj en ms.

Cependant, cette solution a un inconvénient, le système fera toujours en sorte d'effectuer cette maj, y compris si l'appareil est en sommeil. Pour cette raison, il ne faut déclencher la maj au maximum toutes les 30 mn, voire 1h. Le mieux étant cependant de limiter les maj à une ou deux fois max. par jour.

 

Raffraichissement par intent

Une autre solution consiste à mettre à jour l'AppWidget par une intent personnalisée.

Dans ce cas, définissez votre intent dans le receiver de l'appWidget, et recodez la méthode onReceive() pour traiter votre intent.

Dans l'exemple suivant: APPWIDGET_UPDATE_INFOS est le nouvel intent.

Dans l'appWidget:

 

Raffraichissement périodique par Alarme

Enfin, une dernière solution (combiné avec la précédente) consiste à utiliser les alarmes pour déclencher une maj périodique par intent. Programmez votre alarme de manière classique, puis déclenchez un intent perso (comme expliqué précédemment) vers votre AppWidget pour déclencher la maj.

Evidemment, vous utilisez une alarme qui n'a pas besoin de réveiller l'appareil lorsque celui-ci est en sommeil ! Mieux, vous choisissez une alarme avec "réveil imprécis" !