Android - Restaurer la dernière activité vue
-
11-09-2019 - |
Question
J'ai 3 différentes activités que l'utilisateur navigue entre dans aucun ordre particulier. Mon objectif, il double:
- Lorsque l'utilisateur passe à autre chose quand l'application est repris, je veux commencer où l'utilisateur a quitté, même si l'application a pris fin
- La dernière fois que l'activité est reprise, je veux restaurer le dernier état considéré (celui-ci je pense avoir une assez bonne idée sur la façon de achive)
Je pense que le problème n'est pas start / stop - où je reçois à peu près ce que je dois, mais onCreate()
si l'application a été arrêté. Dans ce cas - il prend l'activité que je configuré dans le manifeste. Je suppose que je peux mettre quelque chose dans la méthode de onCreate()
de cette activité par défaut, mais est-il une meilleure façon que je manque peut-être?
La solution
Si votre application n'a pas été « terminée », alors n ° 1 devrait déjà fonctionner et # 2 nécessite simplement enregistrer les valeurs qui ne sont pas gérées automagiquement dans le Bundle onSaveInstanceState () puis de les restaurer dans onRestoreInstanceState () .
est une sorte de hack, mais je pense que votre meilleure option pour # 1 dans le cas de l'application effectivement fin serait de sauver l'activité la plus récente dans le onResume de chacune de vos classes d'activité puis lors de la première course la onCreate de votre première activité faire un contrôle, puis lancez une nouvelle activité correcte ... peut-être même mis dans une activité vide au début. Quelque chose comme ceci:
StartActivity:
public class StartActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get last open Activity
String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
if (last_activity == MyActivity2.getSimpleName()) {
startActivityForResult(new Intent(this, MyActivity2.class));
} else if (last_activity == MyActivity3.getSimpleName()) {
startActivityForResult(new Intent(this, MyActivity3.class));
} else {
// assume default activity
startActivityForResult(new Intent(this, MyActivity1.class));
}
}
public void onActivityResult() {
// kill the activity if they go "back" to here
finish();
}
}
Ensuite, dans toutes les autres activités (MyActivity1,2,3) enregistrer les valeurs comme ceci:
@Override
public void onResume() {
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
e.putString("last_activity", getClass().getSimpleName());
e.commit();
super.onResume();
}
Vous devrez également gérer l'enregistrement / restauration des données pour chaque activité manuellement. Vous pouvez enregistrer toutes les valeurs dont vous avez besoin dans les préférences à l'intérieur du OnPause () de chacune des activités, puis la restaurer dans le onResume ().
Autres conseils
Gardez à l'esprit que onSaveInstanceState () n'est pas viable pour l'état à long terme, à savoir les pouvoirs de l'utilisateur du téléphone vers le bas et se transforme alors en arrière sur à un moment indéterminé plus tard. Vous devrez créer votre propre mécanisme d'Etat à long terme si vous le souhaitez pour votre état pour survivre les cycles de puissance.
Je crois que vous voulez mettre en œuvre onSaveInstanceState et qui stockera vos activités état dans un paquet. Ce paquet sera passé dans votre activité dans onCreate, et vous pouvez l'utiliser pour réinitialiser vos valeurs.
http://developer.android.com/guide/topics/fundamentals .html # actstate