Utilizzando la classe di applicazione
A seconda di ciò che stai facendo nella tua inizializzazione, potresti prendere in considerazione la creazione di una nuova classe che estende Application
e sposta il tuo codice di inizializzazione in un onCreate
metodo ignorato all'interno di quella classe.
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
L' onCreate
nella classe di applicazione si chiama solo quando viene creata l'intera applicazione, quindi il riavvio di attività sull'orientamento o tastiera modifiche di visibilità non attivano esso.
È buona norma esporre l'istanza di questa classe come singleton ed esporre le variabili dell'applicazione che si stanno inizializzando utilizzando getter e setter.
NOTA: è necessario specificare il nome della nuova classe di applicazione nel manifest affinché sia registrata e utilizzata:
<application
android:name="com.you.yourapp.MyApplicationClass"
Reazione alle modifiche alla configurazione [AGGIORNAMENTO: è obsoleto dall'API 13; vedi l'alternativa consigliata ]
Come ulteriore alternativa, puoi fare in modo che l'applicazione ascolti gli eventi che potrebbero causare un riavvio, come cambiamenti di orientamento e visibilità della tastiera, e gestirli all'interno della tua attività.
Inizia aggiungendo il android:configChanges
nodo al nodo manifest della tua attività
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
o per Android 3.2 (livello API 13) e successivi :
<activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
Quindi, all'interno dell'Attività, sovrascrivere il onConfigurationChanged
metodo e chiamare setContentView
per forzare il layout della GUI da rifare nel nuovo orientamento.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}