2009-10-29 2 views
5

Je souhaite planifier automatiquement un thread avec un intervalle de temps particulier. J'ai également besoin de l'exécuter en arrière-plan en continu sans pendre à l'appareil.Comment puis-je planifier un thread particulier dans Blackberry

J'ai essayé ceci avec la classe Application Manager mais c'est pour la planification d'application et j'ai besoin de programmer des threads dans l'application.

Répondre

6

J'utiliser TimerTask:

public class MyScreen extends MainScreen { 
    private Timer mTimer; 
    public MyScreen() {   
     mTimer = new Timer(); 
     //start after 1 second, repeat every 5 second 
     mTimer.schedule(mTimerTask, 0, 5000); 
    } 

    TimerTask mTimerTask = new TimerTask() { 
     public void run() { 
      // some processing here 
     } 
    }; 
} 

voir BlackBerry API Hidden Gems (Part Two)

0

Tant que l'application est en cours d'exécution - il suffit de créer le fil et après chaque travail, appelez Thread.sleep aussi longtemps que vous en avez besoin pour rester en dormance.

Si vous avez besoin de se réveiller jusqu'à à un moment donné, plutôt que de simplement dormir pendant un moment donné, alors vous pouvez faire quelque chose comme ce qui suit:

Date wakeUpAt = ...; // Get this however 
Date now = new Date(); 
long millisToSleepFor = wakeUpAt.getTime() - now.getTime(); 
Thread.sleep(millisToSleepFor); 
+0

Merci, mais dans le sommeil, il est suspendu pour le temps donné (à long millisToSleepFor) temps. – Rishabh

+0

Etes-vous en train de dire que pendant que le Thread est en veille, le périphérique ne programme pas d'autres threads? Le point entier de sleep() est que le thread n'est pas programmé sur le CPU pendant ce laps de temps ... –

2

utilisation UiApplication.getUiApplication().invokeLater() il accepte un délai et répétez les paramètres et exécuterez exactement ce dont vous avez besoin.

EDIT

Je sais que ce poste est vieux, mais c'est de loin la meilleure option pour programmer la répétition d'événements et je voudrais ajouter que pour arrêter l'événement prévu ce qui suit est nécessaire:

//Start repeating "runnable" thread every 10 seconds and save the event ID 
int eventId = UiApplication.getUiApplication().invokeLater(runnable, 10000, true); 

//Cancel the repetition by the saved ID 
UiApplication.getUiApplication().cancelInvokeLater(eventId); 
+0

Droite, mais est-ce que le thread commence à s'excuter après avoir quitté l'application à un délai donné, par exemple retard de 1 journée. – Rishabh

+0

vous pourriez ajouter UiApplication.getUiApplication(). RequestBackground(); dans votre méthode onClose() substituée pour laisser l'application s'exécuter en arrière-plan mais (afaik) tout thread que vous démarrez du point de vue du contexte d'application sera tué après sa fermeture correcte, y compris les threads programmés. – Lisandro

1

En supposant que vous souhaitez exécuter un thread au démarrage de l'unité: Créez un deuxième projet et répertoriez-le comme un autre point d'entrée. Dans votre application principale UiApplication ou Application(), vérifiez l'argument transmis au projet. Faites vos trucs périodiques là via Thread.sleep et n'appelez pas enterEventDispatcher.

recherche « Autostart »: http://docs.blackberry.com/en/developers/deliverables/1076/development.pdf

Ou si vous voulez faire quelque chose une fois qu'un utilisateur « commence », regardez ensuite dans la création d'un nouveau thread pour faire vos trucs de temps. Remplacez votre onClose() et utilisez Application.getActivation(). Deactivate() pour lancer l'écran en arrière-plan.

Ou il y a d'autres façons de faire quelque chose comme ça comme invokeLater, etc. Peut-être que les listeurs d'événements peuvent faire ce dont vous avez besoin, mais vous n'avez pas donné beaucoup de détails.

Questions connexes