2010-01-22 6 views
2

Afin de conserver l'état dans mon application Android, de sorte que l'utilisateur retourne à l'activité qu'ils avaient laissé à, je l'ai mis le alwaysRetainTaskState drapeau très utile dans mon manifeste:état persistant Android avec des variables globales lorsque le système tue les activités

<activity android:name=".Main" 
       android:label="@string/app_name" 
       android:alwaysRetainTaskState="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Cela fait le travail, ou alors je pensais; J'ai découvert que le système peut encore détruire les activités de mon application pour préserver la mémoire, tout en conservant son état. Pour vérifier cela, j'ai écrit une petite application de test qui crée tout un tas d'activités en boucle pour voir si les activités de mon application seraient détruites. Effectivement, le système détruit mes activités.

Avec un peu de lecture, je trouve que je dois utiliser pour aider à maintenir l'état d'activité onSaveInstanceState() et onRestoreInstanceState().

Pour arriver à ma question, disons que j'ai une activité avec un certain nombre de variables globales, certains d'entre eux sont statiques et certains ne sont pas. Ils sont constitués de booléens, d'arraylistes, de chaînes de caractères, etc. Mon problème est que je suis confus quant à la nature de ces variables persistantes lorsqu'une activité est détruite. Lesquels dois-je empaqueter dans le paquet dans onSaveInstanceState()? Le système fait-il quelque chose à ces variables lorsqu'une activité est détruite?

Répondre

5

disons que j'ai une activité avec un nombre de variables globales, certains d'entre eux sont statiques et certains ne sont pas.

Il n'existe pas de «variable globale» en Java. De même, les membres de données statiques non définitifs (c'est-à-dire mutables) doivent être évités autant que possible.

Lesquels devrais-je empaqueter dans l'ensemble dans onSaveInstanceState()?

Il est impossible de répondre dans l'abstrait.

Le système faire quelque chose pour ces des variables lorsqu'une activité est détruite?

Peut-être. Les membres de données statiques vivent aussi longtemps que le processus vit. Lorsque votre dernière activité est détruite, votre processus sera terminé dans un avenir pas trop lointain, et ces membres de données statiques seront éliminés. Lors de la prochaine exécution de votre application, ces membres de données statiques seront réinitialisés.

+0

ouais je n'étais pas clair sur ce que je voulais emballer dans le paquet. ce que je voulais dire est: les variables statiques doivent-elles être sauvegardées? faire le non-statique? D'après ce que vous dites, les membres statiques n'auront pas besoin d'être sauvegardés lorsque saveInstanceState() est appelée. les variables non statiques persistent-elles lorsqu'une activité est détruite? – jlim

+0

Désolé de ressusciter --- J'essaie également de déterminer quelle est la meilleure façon de s'assurer que certaines actions de l'utilisateur prises dans mon application qui ajoutent des vues dynamiques à la vue principale (appWidgets réels) seront souvenus, peu importe quoi. Je ne sais pas si c'est aussi simple qu'un état d'instance enregistré ou si j'ai besoin d'un autre type de magie qui retient leurs choix et les reconstruit d'une manière ou d'une autre – mylock