Verwendung der Anwendungsklasse
Je nachdem, was Sie in Ihrer Initialisierung tun, könnten Sie eine neue Klasse erstellen, die die Application
und verschieben Ihren Initialisierungscode in eine überschriebene onCreate
Methode innerhalb dieser Klasse.
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
El onCreate
in der Anwendungsklasse wird nur aufgerufen, wenn die gesamte Anwendung erstellt wird, so dass der Neustart der Aktivität bei Änderungen der Ausrichtung oder der Sichtbarkeit der Tastatur diese Funktion nicht auslöst.
Es ist eine gute Praxis, die Instanz dieser Klasse als Singleton darzustellen und die Anwendungsvariablen, die Sie initialisieren, mit Gettern und Settern darzustellen.
HINWEIS: Sie müssen den Namen Ihrer neuen Anwendungsklasse im Manifest angeben, damit sie registriert und verwendet werden kann:
<application
android:name="com.you.yourapp.MyApplicationClass"
Reagieren auf Konfigurationsänderungen [UPDATE: Dies ist seit API 13 veraltet; siehe die empfohlene Alternative ]
Als weitere Alternative können Sie Ihre Anwendung auf Ereignisse warten lassen, die einen Neustart auslösen würden - wie z. B. Änderungen der Ausrichtung und der Sichtbarkeit der Tastatur - und diese innerhalb Ihrer Aktivität verarbeiten.
Beginnen Sie mit dem Hinzufügen der android:configChanges
Knoten zum Manifestknoten Ihrer Aktivität
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
oder für Android 3.2 (API-Level 13) und neuer :
<activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
Dann überschreiben Sie innerhalb der Aktivität die onConfigurationChanged
Methode und rufen setContentView
um zu erzwingen, dass das GUI-Layout in der neuen Ausrichtung neu erstellt wird.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}
4 Stimmen
Eine recht ausführliche Erklärung, wie man lang laufende asynchrone Tasks bei Änderungen der Aktivitätskonfiguration beibehält, finden Sie unter dieser Blogbeitrag auch!
3 Stimmen
Dies ist keine direkte Antwort, da andere bereits geantwortet haben, aber ich lade Sie ein, einen Blick zu werfen auf LogLifeCycle um zu verstehen, was in Ihren Android-Anwendungen in Bezug auf die Lebenszyklen passiert.