web-dev-qa-db-fra.com

Durée de vie d'une variable statique dans Android

lorsque je déclare et initialise une variable comme statique dans mon activité principale et que celle-ci est détruite. Puis-je quand même accéder au contenu de la variable?

Par exemple, pour toujours accéder à une AsyncTask que je stocke dans cette variable? Ce que je veux, c'est pouvoir y accéder même après un changement d'orientation.

23
maysi

Les variables statiques sont associées à une classe et resteront vivantes tant que la classe sera en mémoire. Elles seront détruites lorsque la classe sera déchargée (ce qui arrive très rarement).

Dans Android, vous avez constaté que, lorsque vous fermez une application, celle-ci ne se ferme pas complètement, cela reste dans la pile d'applications récente, ce que vous pouvez voir en maintenant le bouton d'accueil (sur la plupart des périphériques).

Android lui-même a jeté ces dernières applications lorsque l'autre application a besoin Mémoire

12
Tarun Varshney

Puis-je quand même accéder au contenu de la variable?

En supposant que par "détruit", vous entendez quelque chose comme si l'utilisateur appuyait sur BACK, oui.

Les membres de données statiques vivent toute la vie du processus.

Par exemple, pour toujours accéder à une AsyncTask que je stocke dans cette variable? Ce que je veux, c'est pouvoir y accéder même après un changement d'orientation.

Ce n'est pas une solution appropriée. Utilisez un fragment conservé, ou utilisez onRetainNonConfigurationInstance() .

4
CommonsWare

Si le processus est tué, toutes les variables statiques seront réinitialisées à leurs valeurs par défaut.

En effet, lorsque vous redémarrez l'application, une nouvelle instance est créée et la variable statique sera réinitialisée.

3
JNL

Ils restent même si vous fermez l'application en appuyant sur le bouton Précédent tant que vous ne les effacez pas des applications récentes. Preuve: eh bien, je l'ai testé, vous pouvez aussi c'est facile;).

0
steve moretz

Android a le concept de processus vide qui dit que votre application ne peut pas être supprimé de la mémoire s'il est fréquemment utilisé par l'utilisateur, même si toutes ses composantes sont détruites (activités, services et/ou récepteurs de diffusion), auquel cas les variables statiques ne seront pas effacé complètement.

La classe d’application est le meilleur moyen de partager des variables temporaires entre les composants car la classe d’application sera créée correctement au moment du démarrage de l'application et sera effacé lorsque l'utilisateur quittera app.

Référence: http://skillgun.com/question/9849/Android-provab/face-to-face-round/if-i-close-the-application-will-it-destroy-all-the-static- variables

0
Android Developer

Les variables statiques ou les blocs statiques ne sont pas associés à l'objet. Ce sont des variables de niveau de classe non associées à un objet. Si nous détruisons un objet, la variable statique ne détruira pas ce qui est défini dans la même classe. La variable statique s'initialise une fois en mémoire.

donc, lorsque nous fermons les objets de l'application, détruisons mais la variable statique ne détruit pas. Mais lorsque nous effaçons l'application, la classe détruit et donc la variable statique également. Parfois, Android kill class en raison d'un espace mémoire libre dans ce cas, la variable statique détruit. 

0
Abhishek Joshi