2010-11-17 4 views
3

Infosminuterie avec rappel

  • J'ai un SensorClass de classe qui gère certains capteurs.
  • J'ai une interface avec la méthode A().
  • J'ai une classe de testeur TestClass qui implémente l'interface avec la méthode A() et passe cette implémentation à SensorClass. TestClass étend l'activité.

Objectif

  • Chaque X secondes je dois appeler la méthode mise en œuvre de l'interface stockée dans SensorClass. C'est un rappel.
  • Je ne sais pas comment est implémentée la méthode A(), donc il peut modifier les vues de son activy.
  • J'ai besoin d'un minuteur parce que je veux démarrer la méthode de rappel -exécution A() à partir de l'interface stockée dans SensorClass- toutes les X secondes. Ainsi, je fais ce qui suit:
 
public void do(){ 
timer.scheduleAtFixedRate (new TimerTask(){ 
    public void run(){ 
    storedInterface.A(); 
    } 
}, 0, speed); 
} 
  • Mais comme je le disais, je ne sais pas comment est mise en oeuvre A(). Je dois exécuter la méthode dans runOnUIThread() car elle peut modifier les vues.
 
private void startCallback(){ 
runOnUiThread (new Runnable(){ 
    public void run(){ 
    storedInterface.A(); 
    } 
}); 
} 

public void do(){ 
timer.scheduleAtFixedRate (new TimerTask(){ 
    public void run(){ 
    startCallback(); 
    } 
}, 0, speed); 
} 
  • Problème: SensorClass est pas une activité, si runOnUIThread() provoque une erreur.

solution Posible

Étendre SensorClass d'une activité mais SensorClass n'est pas une activité avec des méthodes onCreate(), OnPause(), etc !!! Je n'aime pas cette solution.


Ma question est: Comment puis-je appeler runOnUIThread() dans une classe qui ne reçoit qu'un contexte d'une activité? Ou ... Y a-t-il une autre solution à mon problème?

Merci.

Répondre

7

Résolu à l'aide du gestionnaire. Excellent outil!

 
public void do(){ 
    final Handler handler = new Handler(); 
    timer.scheduleAtFixedRate (new TimerTask(){ 
     public void run(){ 
      handler.post (new Runnable(){ 
       public void run(){ 
        storedInterface.A(); 
       } 
      }); 
     } 
    }, 0, speed); 
} 
+0

+ 1, + 1, bonne question, bonne réponse –