Utilisation de la classe d'application
Selon ce que vous faites dans votre initialisation, vous pouvez envisager de créer une nouvelle classe qui étend Application
et de déplacer votre code d'initialisation dans une onCreate
méthode redéfinie au sein de cette classe.
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
Dans onCreate
la classe d'application est appelé uniquement lorsque l'application entière est créée, de sorte que l'activité redémarre lors de changements d'orientation ou de visibilité du clavier ne la déclenchera pas.
Il est recommandé d'exposer l'instance de cette classe en tant que singleton et d'exposer les variables d'application que vous initialisez à l'aide de getters et setters.
REMARQUE: vous devrez spécifier le nom de votre nouvelle classe d'application dans le manifeste pour qu'elle soit enregistrée et utilisée:
<application
android:name="com.you.yourapp.MyApplicationClass"
Réagir aux changements de configuration [MISE À JOUR: ceci est obsolète depuis l'API 13; voir l'alternative recommandée ]
Comme alternative, vous pouvez demander à votre application d'écouter les événements qui provoqueraient un redémarrage - comme les changements d'orientation et de visibilité du clavier - et de les gérer dans votre activité.
Commencez par ajouter le android:configChanges
nœud au nœud manifeste de votre activité
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
ou pour Android 3.2 (API niveau 13) et plus récent :
<activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
Ensuite, dans l'activité, remplacez la onConfigurationChanged
méthode et appelez setContentView
pour forcer la disposition de l'interface graphique à refaire dans la nouvelle orientation.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}