Heim  >  Artikel  >  Java  >  Lebenszyklus der horizontalen und vertikalen Bildschirmumschaltung bei Android-Aktivitäten

Lebenszyklus der horizontalen und vertikalen Bildschirmumschaltung bei Android-Aktivitäten

高洛峰
高洛峰Original
2017-01-07 15:55:532056Durchsuche

Vorwort

In der Entwicklung müssen wir uns oft mit horizontalen und vertikalen Bildschirmwechseln befassen. Wie wir zuerst damit umgehen, hängt vom Lebenszyklus ab

Deklaration

Aktivität Beim Umschalten zwischen horizontalen und vertikalen Bildschirmen müssen zwei Funktionen zurückgerufen werden. Diese beiden Funktionen werden vorübergehend als Teil des Lebenszyklus der horizontalen und vertikalen Bildschirmumschaltung betrachtet. Diese beiden Funktionen lauten wie folgt:

onSaveInstanceState(Bundle outState) :Activity 即将销毁时保存数据
onRestoreInstanceState(Bundle savedInstanceState) : Activity 重建或者恢复时候取出数据

Horizontaler und vertikaler Bildschirmwechsel Lebenszyklus

1. Starten Sie das Programm und rufen Sie die Aktivitätsoberfläche auf

Android Activity 横竖屏切换的生命周期

2. Drehen Sie den Bildschirm

Android Activity 横竖屏切换的生命周期

3, Drehen Sie den Bildschirm erneut

4 Stellen Sie

android:configChanges="orientation|screenSize" ein AndroidManifest.xml ruft nicht jeden Lebenszyklus erneut auf, sondern führt nur die onConfigurationChanged-Methode aus

Android Activity 横竖屏切换的生命周期

Hinweis:

MiniSdkVersion ist größer als oder gleich 13: android:configChanges="orientation" oder android:configChanges="orientation|keyboardHidden" Jeden Lebenszyklus abrufen

Wenn MiniSdkVersion kleiner als 13 ist:

(1) Wenn der Android :configChanges der Aktivität ist nicht festgelegt, jeder Lebenszyklus wird beim Umschalten des horizontalen Bildschirms erneut aufgerufen und einmal beim Umschalten des vertikalen Bildschirms.

(2) Beim Festlegen der android:configChanges="orientierung" der Aktivität wird jeder Lebenszyklus beim Wechseln des Bildschirms erneut aufgerufen und beim Wechseln des horizontalen oder vertikalen Bildschirms nur einmal ausgeführt

(3) Beim Festlegen der Aktivität android:configChanges="orientation|keyboardHidden", beim Wechseln des Bildschirms wird nicht jeder Lebenszyklus erneut aufgerufen, sondern nur die Methode onConfigurationChanged wird ausgeführt

5. Vermeiden Sie den Bildschirmwechsel und starten Sie den Aktivitätslebenszyklus neu

Aus dem obigen Lebenszyklus des Bildschirmwechsels können wir ersehen, dass jeder Wechsel neu erstellt wird. Um unnötige Probleme wie die Bildschirmdrehung während der Videowiedergabe zu vermeiden, ist es eine bessere Lösung, eine Wiederholung des Lebenszyklus zu vermeiden

(1) Versionen vor Android 2.3 android:configChanges="orientation|keyboardHidden"

(2) Versionen nach Android 3.0 android:configChanges="orientation|screenSize"

horizontale und vertikale Bildschirme Einstellungen

Der horizontale und vertikale Bildschirmwechsel bei Android ist bei der Entwicklung von Mobiltelefonen relativ häufig. Um unnötige Probleme beim Wechsel zwischen horizontalen und vertikalen Bildschirmen während des Entwicklungsprozesses zu vermeiden, verbieten viele Softwareprogramme normalerweise den Wechsel zwischen horizontalen und vertikalen Bildschirmen.

1. Legen Sie den Attributwert android:screenOrientation in der Aktivität in AndroidManifest.xml fest, um dies zu erreichen.

(1) Vertikaler Bildschirm: android:screenOrientation="portrait"

(2) Horizontaler Bildschirm: android:screenOrientation="landscape"

2. Im Java-Code eingestellt Verwenden Sie dazu einen Code, der dem folgenden ähnelt (diese Methode wird nicht empfohlen, da sie beim Starten einer großen App in verschiedene Richtungen langsam ist)

(1) Vertikaler Bildschirm: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

(2) Horizontaler Bildschirm: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

3 Wenn Sie das Umdrehen durch Schwerkraftinduktion vollständig verhindern möchten (funktioniert auf dem Simulator nicht, ist aber korrekt). das reale Gerät)

(1) Schwerkraft ignorieren: android:screenOrientation="nosensor"

Horizontale und vertikale Bildschirmerkennung

1. In der Reihenfolge onConfigurationChanged Um Änderungen der Bildschirmausrichtung effektiv überwachen zu können, sind die folgenden Bedingungen erforderlich

(1) AndroidManifest.xml fügt Berechtigungen hinzu: ebf50ea71981ffbb06de35d1fabafefbdc5b20862aead44993860a99f6e45a27

(2) AndroidManifest.xml Die in festgelegten Attribute MiniSdkVersion und TargetSdkVersion sind größer oder gleich 13

(3) Hinzufügen: android:configChanges="keyboard|screenSize| Orientierung|layoutDirection"

(4) in der Aktivität von AndroidManifest.xml Treffen Sie ein Urteil in onConfigurationChanged(Configuration newConfig)

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == 1)//竖屏
if(newConfig.orientation == 2)// 横屏
}

2. Denn wenn der Bildschirm zum horizontalen Bildschirm wechselt, ruft das System die onCreate-Methode der Aktivität erneut auf. Überprüfen Sie die aktuelle Richtung in onCreate und lassen Sie dann Ihr setContentView eine andere Layout-XML laden.

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.i("info","landscape"); // 横屏
} else if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
Log.i("info","portrait"); // 竖屏
}

Hinweis: Diese Methode erfordert keine Einstellung von onConfigurationChanged in AndroidManifest.xml, um den Lebenszyklus neu zu starten

Layoutdateien zwischen horizontal und horizontal wechseln Einstellungen für vertikale Bildschirme

Wenn Sie möchten, dass die Software zwischen horizontalen und vertikalen Bildschirmen wechselt, sind möglicherweise unterschiedliche Layouts erforderlich, da sich Höhe und Breite der horizontalen und vertikalen Bildschirme ändern. Sie können Layouts mit den folgenden Methoden wechseln

(1) Erstellen Sie die Verzeichnisse „layout-land“ und „layout-port“ im res-Verzeichnis, und die entsprechenden Layout-Dateinamen bleiben unverändert, z. B. main.xml. Layout-Land ist ein horizontales Bildschirmlayout, Layout-Port ist ein vertikales Bildschirmlayout. Machen Sie sich keine Sorgen um die anderen, der Simulator findet sie automatisch.

(2) Wenn sich bei der obigen horizontalen und vertikalen Bildschirmerkennung die horizontalen und vertikalen Bildschirme ändern, bestimmen Sie die Richtung in onCreate () oder onConfigurationChanged () und setzen Sie dann setContentView in der entsprechenden Methode zurück, um ein anderes XML-Layout zu laden Dateien

Speichern und lesen Sie Daten beim Wechsel zwischen horizontalen und vertikalen Bildschirmen

Außerdem startet jeder Bildschirmwechsel in Android die Aktivität neu, sodass der aktuelle Aktivitätsstatus gespeichert werden sollte, bevor die Aktivität zerstört wird , und wenn die Aktivität erneut erstellt wird, laden Sie die Konfiguration, damit das laufende Spiel nicht automatisch neu gestartet wird!

Aktivitätsdatenspeicherung

(1) Wenn die Aktivität aufgrund von Systemressourcenbeschränkungen oder beim Drehen des Bildschirms zerstört oder neu erstellt wird, verfügt das System über diese Aktivität, wenn der Benutzer zu ihr zurückkehrt. Für frühere Datensätze verwendet das System die gespeicherten Datensatzdaten (Instanzstatus), bei denen es sich um in Bundle-Objekten gespeicherte Schlüssel-Wert-Paare handelt. Das System verwendet Bundle standardmäßig zum Speichern von Informationen

(2) Zum Speichern Zusätzliche Aktualisierungen Um dem Instanzstatus weitere Daten hinzuzufügen, müssen wir die Rückruffunktion onSaveInstanceState(Bundle outState) neu schreiben. Das System übergibt das Bundle-Objekt, wenn die Aktivität durch eine Ausnahme zerstört wird, damit wir dem Bundle zusätzliche Informationen hinzufügen können und speichern Sie es im System. Wenn das System diese Aktivitätsinstanz neu erstellen möchte, nachdem die Aktivität zerstört wurde, wird das vorherige Bundle-Objekt (das System) an Ihre Aktivität übergeben

(3) Die Aktivität beginnt zu stoppen und das System stoppt Rufen Sie onSaveInstanceState(Bundle outState) auf. Die Aktivität kann eine Sammlung von Schlüssel-Wert-Paaren verwenden, um Statusinformationen zu speichern. Diese Methode speichert standardmäßig die Statusinformationen der Aktivitätsansicht, z. B. den Text in der EditText-Komponente oder die Gleitposition der ListView

Aktivitätsdatenwiederherstellung

(1) Wenn die Aktivität aus Destory neu erstellt wird, können wir den gespeicherten Zustand aus dem vom System übergebenen Aktivitätspaket wiederherstellen. Sowohl die Rückrufmethoden onCreate() als auch onRestoreInstanceState() empfangen dasselbe Bundle, das dieselben Instanzstatusinformationen enthält.

(2) Da die onCreate()-Methode sowohl dann aufgerufen wird, wenn eine neue Aktivitätsinstanz zum ersten Mal erstellt wird, als auch wenn eine zuvor zerstörte Instanz neu erstellt wird, müssen wir prüfen, ob es sich um ein Bundle-Objekt handelt bevor Sie versuchen, es zu lesen. Wenn es null ist, erstellt das System eine neue Aktivitätsinstanz, anstatt die zuvor gelöschte Aktivität wiederherzustellen.

(3) Sie können auch onRestoreInstanceState() implementieren, anstatt Daten in der onCreate-Methode wiederherzustellen. Die Methode onRestoreInstanceState() wird nach der Methode onStart() ausgeführt. Das System ruft onRestoreInstanceState() nur auf, wenn Statusinformationen wiederhergestellt werden müssen, sodass nicht überprüft werden muss, ob das Bundle null ist.

Das Obige ist das vom Herausgeber eingeführte Wissen über den Lebenszyklus der horizontalen und vertikalen Bildschirmumschaltung von Android. Ich hoffe, es wird für alle hilfreich sein!

Weitere Artikel zum Lebenszyklus der horizontalen und vertikalen Bildschirmumschaltung bei Android-Aktivitäten finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn