Je ne comprends pas l'implémentation d'une boucle while dans Android.
Chaque fois que j'implémente une boucle while dans le bundle onCreate()
, (code affiché ci-dessous)
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
TextView=(TextView)findViewById(R.id.TextView);
while (testByte == 0)
updateAuto();
}
rien ne démarre et le programme entre dans un état "suspendu" après un certain temps et je ne comprends pas pourquoi. Testbyte est le suivant:
byte testByte == 0;
et updateAuto()
est censé mettre à jour le code toutes les 1 seconde et l'afficher dans la partie textView. J'ai utilisé setText dans updateAuto () comme indiqué ci-dessous et tout fonctionne bien, mais une fois que j'ai implémenté la boucle while, tout ce que je vois est un écran noir, puis une option pour forcer la fermeture après quelques secondes car il "ne répond pas" .
TextView.setText(updateWords);
Je l'ai changé en format de bouton (ce qui signifie que je dois cliquer sur le bouton pour se mettre à jour pour l'instant), mais je veux qu'il se mette à jour au lieu de le cliquer manuellement.
Suis-je en train d'implémenter la boucle while de manière incorrecte?
J'ai également essayé d'appeler la boucle while dans une fonction séparée mais cela me donne toujours l'écran noir du néant.
J'ai lu quelque chose sur un service de gestionnaire ... que fait-il? Le service de gestion peut-il mettre à jour mon TextView
d'une manière plus sûre ou efficace en mémoire?
Merci beaucoup si quelqu'un donne quelques conseils sur ce que je dois faire à ce sujet.
Préparez vous. Et essayez de suivre de près, ce sera inestimable en tant que développeur.
Alors que les boucles ne devraient vraiment être implémentées que dans un thread séparé. Un thread séparé est comme un deuxième processus en cours d'exécution dans votre application. La raison pour laquelle il se ferme est parce que vous avez exécuté la boucle dans le thread d'interface utilisateur, ce qui rend l'interface utilisateur incapable de faire quoi que ce soit, sauf pour passer par cette boucle. Vous devez placer cette boucle dans le deuxième thread afin que le thread d'interface utilisateur puisse être libre de s'exécuter. Lors du threading, vous ne pouvez pas mettre à jour l'interface graphique à moins que vous ne soyez dans le thread d'interface utilisateur. Voici comment cela serait fait dans ce cas.
Tout d'abord, vous créez un Runnable, qui contiendra le code qui boucle dans sa méthode run. Dans ce Runnable, vous devrez créer un deuxième Runnable qui sera publié sur le thread d'interface utilisateur. Par exemple:
TextView myTextView = (TextView) findViewById(R.id.myTextView); //grab your tv
Runnable myRunnable = new Runnable() {
@Override
public void run() {
while (testByte == 0) {
Thread.sleep(1000); // Waits for 1 second (1000 milliseconds)
String updateWords = updateAuto(); // make updateAuto() return a string
myTextView.post(new Runnable() {
@Override
public void run() {
myTextView.setText(updateWords);
});
}
}
};
Ensuite, créez simplement votre thread en utilisant Runnable et démarrez-le.
Thread myThread = new Thread(myRunnable);
myThread.start();
Vous devriez maintenant voir votre application en boucle sans fermeture forcée.