La durée de vie de la statique (classe) variables
depuis quelques temps j'ai ressenti de l'opinion que statique [instance] les variables existent aussi longtemps que l'application s'exécute. cependant, à mon grand désarroi, et bien d'alarme, j'ai l'impression que c'est pas vrai.
pour de simples tests, j'ai créé une liste statique de chaînes, et dans mon principal activity
classe remplacé le onDestroy
méthode pour imprimer un message afin de vérifier que l'application est sorti. dans le onCreate
méthode j'ai simplement ajouté un nouveau string
, et d'imprimer le contenu de la liste. ce que j'ai trouvé est que la taille de la liste est en constante augmentation, et toute la chaîne des valeurs ajoutées précédemment sont toujours présents.
j'ai lu dans les lieux [même ici, sur la de façon à ce que les variables d'instance existera tant que l'application n', mais j'ai peur que cela n'est pas vraiment ainsi.
pour être plus précis, je suis venu à être conscients de ce problème, tout en utilisant le Facebook SDK pour Android. j'ai vu que le AuthListener
instances au sein de la liste des auditeurs de la SessionEvents
classe ne cesse d'augmenter au fil du temps. Par conséquent, chaque fois que l'application est lancée et que l'utilisateur se connecte à l'aide de FB, les méthodes d'écoute se déclencher autant de fois qu'il y a des cas présents dans la SessionEvents
classe.
Quelqu'un a remarqué cela avant, et est-il un cardinal erreur que je commets dans la compréhension de comment android fonctionne?
ce qui donne?
merci pour la lecture!
[Mise à JOUR]
Je suis corrigée par BalusC
et rdineiu
. Je n'ai vraiment pas moyen de créer une confusion ici sur l'instance et les variables de classe. Hélas, dans ma hâte de poster ma question j'ai commis une erreur que je ne souhaite pas. Je suis très bien conscient de la différence entre static
et instance
variables. J'ai juste voulu écrire class
variables, et ne peuvent pas vraiment comprendre ce qui est venu de se référer à des variables statiques comme instance
variables.
Cependant, ma question est toujours debout.
@MisterSquonk - non, je ne suis pas de confusion ici sur quand mon Activity
et se termine lorsque l'application est détruit. Voici ce que j'ai essayé sur un échantillon - j'ai UNE seule Activity
qui sert de Main
. Lorsque j'appuie sur le bouton de retour de ce Activity
, je suis en supposant que le Activity
obtient retiré de la pile et l'application obtient également détruit. J'ai lancé le Gestionnaire de Tâches pour vérifier que mon application ne fonctionne plus.
Ne sont pas directement liées à votre question, mais en référence à quelque chose que vous avez dit..."dans mon activité principale classe remplacé le onDestroy méthode pour imprimer un message afin de vérifier que l'application est sorti" - à Ne pas confondre l'Activité avec l'Application. Tuer une Activité n'est PAS nécessairement tuer l'Application ("l'application").
non, je ne suis pas de prendre une telle confusion. dans mon application, je suis tout à fait certain que la mise à mort de la
activity
signifie également que l'application n'est plus en cours d'exécution. j'ai vérifié à l'aide du gestionnaire des tâches, et ont mis à jour le post pour parler de la même chose.OriginalL'auteur anirvan | 2011-05-28
Vous devez vous connecter pour publier un commentaire.
Vous semblez ne pas faire la distinction entre les variables statiques et d'instance. Les variables statiques sont définies sur la classe elle-même. Les variables d'Instance sont présents uniquement dans les instances de classe.
Exemple:
La variable
a
est défini sur la classe elle-même, pas sur les instances de la classe. Chaque instance d'accéder à la même variable. Si une instance définit la valeur dea
à5
, tous les autre exemple va voir la valeur que5
. La variable ne sera pas disparaître une fois que l'instance s'évanouit, car il n'est en aucune manière liée à une instance quelconque (c'est un variable de classe). Elle continuera de l'être jusqu'à la fin des temps (ou jusqu'à ce que l'application se ferme, selon la première éventualité).D'autre part, l'exemple suivant utilise une variable d'instance:
Cette variable sera accessible qu'à partir de instances de la classe. Chaque instance aura une autre copie de la variable. Une fois que l'instance est détruite, la variable va avec.
Pour illustrer:
OriginalL'auteur rid
donc - j'avais posté la même question [malheureusement faire la même erreur d'appellation d'
static
variables commeinstance
variables] sur l'Android Developer groupe Google.J'ai reçu de très bonnes réponses, en particulier à partir de Kostya. Mes interactions sur le groupe m'a aidé à saisir le sous-jacent "règles" de la plate-forme Android.
Espère que le fil de discussion vous aide ainsi.
OriginalL'auteur anirvan
Les variables d'instance sont détruits lors de l'application ne mais certains gui widgets par défaut enregistrer leur état, puis la restaurer dans la méthode onCreate.
OriginalL'auteur Ha.