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 Applicatione sposta il tuo codice di inizializzazione in un onCreatemetodo 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' onCreatenella 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:configChangesnodo 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 onConfigurationChangedmetodo e chiamare setContentViewper forzare il layout della GUI da rifare nel nuovo orientamento.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}