2010-12-07 4 views
3

J'ai suivi un tutoriel pour faire Android Widgets App, et j'avais un peu de mal. Le tutoriel m'a conduit à créer ce code:Mise à jour Widget App TextView

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int [] appWidgetIds) { 
    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000); 
} 

private class MyTime extends TimerTask { 

    RemoteViews remoteViews; 
    AppWidgetManager appWidgetManager; 
    ComponentName thisWidget; 
    DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault()); 

    public MyTime(Context context, AppWidgetManager appWidgetManager) { 
     this.appWidgetManager = appWidgetManager; 
     remoteViews = new RemoteViews(context.getPackageName(), R.layout.main); 
     thisWidget = new ComponentName(context, FlipWidget.class); 
    } 

    @Override 
    public void run() { 
     remoteViews.setTextViewText(R.id.widget_text, "Time: "+format.format(new Date())); 
     appWidgetManager.updateAppWidget(thisWidget, remoteViews); 
    } 
} 

mais il semble que la méthode d'exécution est jamais appelée, comme TextView ne change jamais. Merci pour votre aide, j'aimerais avoir un aperçu sur les Widgets App.

Nick

Répondre

3

D'abord, vous ne pouvez pas utiliser Timer. Votre AppWidgetProvider et le Timer seront récupérés après le retour du onUpdate(). Deuxièmement, veuillez ne pas mettre à jour un widget d'application toutes les secondes, s'il-vous-plaît. Il y a une raison pour laquelle android:updatePeriodMillis a un minimum de 30 minutes - pousser les mises à jour aux widgets de l'application est une opération coûteuse. Une mise à jour toutes les secondes forcerait non seulement votre code de "mise à jour d'un widget d'application" à rester en mémoire et à fonctionner tout le temps, mais aussi à vider la batterie de l'utilisateur de manière significative.

Pour les mises à jour périodiques d'un widget d'application, utilisez android:updatePeriodMillis ou utilisez AlarmManager.

+0

Très bien, merci pour votre aide. Les horloges doivent être mises à jour toutes les secondes, est-ce que AlarmManager me permettra de faire cette batterie efficacement? – Nick

+0

@Nick: ne pas implémenter une horloge en tant que widget d'application. Les horloges sont une caractéristique d'un écran d'accueil, ou sont une caractéristique d'une autre activité (par exemple, une application de réveil). – CommonsWare

+0

Donc, je ne prolonge pas AppWidgetProvider. Alors, comment fonctionnent les widgets d'écran d'accueil qui fonctionnent, où dois-je commencer maintenant? – Nick

Questions connexes