décembre
2011
Re-Bonjour,
Toujours dans cette problématique d’Handler et de cycle de vie d’une activité, il y a une solution préconisée par certains qui est d’utiliser la méthode public Object onRetainNonConfigurationInstance() qui permet de renvoyer un pointeur vers un objet à l’activité.
Euh, je m’explique, lorsque votre activité est détruite pour être immédiatement recrée, la méthode onRetainNonConfigurationInstance permet d’envoyer un objet de l’instance de l’activité mourante vers l’instance de la nouvelle activité.
Exemple adapté à notre problème:
@Override
public Object onRetainNonConfigurationInstance() {
return backgroundThread;}
permet de récupérer l’objet dans la méthode onCreate:
@Override
public void onCreate(Bundle savedInstanceState) {
…
backgroundThread=(Thread)getLastNonConfigurationInstance();
if(backgroundThread==null) {
//créer la thread comme d’habitude
}else{
//pas besoin de else, votre thread est récupérée
}
…}
On voit bien qu’avec cette méthode tout paraît résolu (au moins pour le changement d’orientation de l’appareil). Et oui, mais non, c’est une grave erreur que de penser ça. En effet, que se passe-t-il si votre activité est tuée? Ben, votre thread devient orpheline, votre handler et votre activité deviennent des fantômes (car le Garbage collector les détecte utilisés). Et voilà, encore une fois, Dark Vador se gausse.
La solution, et oui, il y en a une, est un peu plus complexe que cela. Il faut ré-implémenter un atomic boolean permettant de tuer la thread si votre activité n’est pas relancée immédiatement.
Et là, ben je vous invite à aller récupérer les tutoriels que j’ai déposé sur Android2EE section Exemple, partie Tutoriels (Handler Tutoriels).
Alors, merci qui?
Merci, Android2ee, les Ebooks de programmation Android :o)
Mathias Séguy
mathias.seguy.it@gmail.com
Auteur Android2EE
Ebooks pour apprendre la programmation sous Android.
Retrouvez moi sur Google+
Suivez moi sur Twitter
Rejoignez mon réseau LinkedIn ou Viadeo
Référence Android
Mots-clés
Archives
- mars 2015
- février 2015
- janvier 2015
- mai 2014
- mars 2014
- janvier 2014
- décembre 2013
- novembre 2013
- septembre 2013
- mai 2013
- mars 2013
- février 2013
- janvier 2013
- décembre 2012
- novembre 2012
- octobre 2012
- septembre 2012
- août 2012
- mai 2012
- avril 2012
- mars 2012
- janvier 2012
- décembre 2011
- novembre 2011
- septembre 2011