Votre onCreate()
a plusieurs énormes défauts :
1) onCreate
prépare votre activité - donc rien de ce que vous faites ici ne sera fait visible à l'utilisateur jusqu'à la fin de cette méthode ! Par exemple, vous ne serez jamais en mesure de modifier un fichier TextView
Le texte de l'auteur est plus que ONE car seule la dernière modification sera dessinée et donc visible pour l'utilisateur !
2) Gardez à l'esprit qu'un programme Android s'exécute - par défaut - dans le format ONE uniquement le fil ! Ainsi : n'utilisez jamais Thread.sleep()
ou Thread.wait()
dans votre thread principal qui est responsable de votre interface utilisateur ! (lire "Gardez votre application réactive" pour plus d'informations)
Ce que votre initialisation de votre activité est :
- sans raison, vous créez un nouveau
TextView
objet t
!
- vous choisissez votre mise en page
TextView
dans la variable t
plus tard.
- vous définissez le texte de
t
(mais gardez à l'esprit qu'il sera affiché seulement après onCreate()
se termine et la boucle d'événement principale de votre application s'exécute !)
- vous attendez 10 secondes au sein de votre
onCreate
méthode - cette ne doit jamais être fait car il arrête toute activité de l'interface utilisateur et va certainement forcer un ANR (Application Not Responding, voir le lien ci-dessus !)
- puis vous définissez un autre texte - celui-ci s'affichera dès que votre
onCreate()
les finitions de la méthode et plusieurs autres Cycle de vie des activités ont été traitées !
La solution :
-
Définissez le texte une seule fois dans onCreate()
- il doit s'agir du premier texte qui doit être visible.
-
Créer un Runnable
et un Handler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
// do whatever you want to change here, like:
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
-
installer ce runnable en tant que handler, possible en onCreate()
(mais lisez mes conseils ci-dessous) :
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Conseil : assurez-vous de connaître un Activity
Le cycle de vie de l'entreprise ! Si vous faites ce genre de choses dans onCreate()
cela ne se produira que lorsque votre Activity
est créé le premièrement temps ! Android va peut-être garder votre Activity
pour une période plus longue, même s'il n'est pas visible ! Lorsqu'un utilisateur le "redémarre" - et qu'il est toujours existant - vous ne verrez plus votre premier texte !
\=> Toujours installer les gestionnaires dans onResume()
et les désactiver dans onPause()
! Sinon, vous recevrez des "mises à jour" lorsque votre Activity
n'est pas du tout visible ! Dans votre cas, si vous voulez voir à nouveau votre premier texte lorsqu'il est réactivé, vous devez le paramétrer dans onResume()
pas onCreate()
!