2009-07-29 3 views
7

J'utilise une seule classe statique dans mon code qui définit un champ statique que je réutilise entre les invocations Activity onStop/onStart. Voici un scénario:Est-ce que le statique est sûr dans Android?

  1. utilisateur clique sur « Autorisez » bouton (données statique est initialisé)
  2. L'activité est arrêtée et le navigateur Web est appelé
  3. Browser exécute est restauré rappel et l'activité (données statiques est réutilisée)

au moins un de mes utilisateurs signale l'échec à l'étape 3 que je ne peux pas reproduire, mais qui ressemble remise à zéro des données statiques

Toutes les suggestions?

Répondre

10

Ce n'est pas sûr. Votre processus peut être tué entre onStop et onStart, donc toutes les données statiques auront disparu. En fait, votre activité peut même être tuée avant qu'elle ne soit activée. Dans vos tests, le processus n'a pas été tué, mais c'était pour l'utilisateur. Voir le cycle Android activity life qui a un bon organigramme montrant les possibilités.

Vous devez stocker les données d'une autre manière, par exemple dans prefs ou dans une base de données.

+0

Merci Heikki. Je pense que je sais quoi faire à ce stade – Bostone

+1

Heikki, que penses-tu de placer le var statique dans le contexte de l'application? Est-ce sûr de cette façon? –

+1

Cela devrait être sûr, mais je ne vois pas l'intérêt de faire une var statique dans un objet qui vit tant que le processus est vivant. Une variable normale devrait suffire à la fois dans le contexte de l'application et dans l'objet de l'application lui-même. –

0

Si ces données statiques sont liées à une activité que vous venez d'arrêter, vous pouvez utiliser des champs non statiques normaux + méthode onSaveInstanceState.

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    // ... save your Serializable data here in outState bundle 
    super.onSaveInstanceState(outState); 
} 

Le cas serait:

  1. vous fermez votre activité et aller au navigateur (onStop est invoqué)
  2. système
  3. tue votre processus d'application (onSaveInstanceState est invoquée où vous enregistrez les données)
  4. L'utilisateur revient à votre activité (onCreate est appelé avec le paramètre savedInstanceState)

Dans la plupart des cas, le 2e point ne se produira pas. Le système peut mais ne doit pas tuer votre processus d'application. Quand ce n'est pas le cas, vous n'obtiendrez pas la méthode onCreate mais les méthodes onStart et onResume et vos champs resteront inchangés.

Questions connexes