Ich habe mich gefragt, warum ich nicht android:configChanges="keyboardHidden|orientation"
in jeder (fast jeder;)) Aktivität verwenden soll.
Waren:
- Sie müssen sich keine Sorgen machen, dass Ihre Aktivität gedreht wurde
- es ist schneller
Nicht so schön:
- Sie müssen Ihre Layouts ändern, wenn sie von der Bildschirmgröße abhängen (z. B. Layouts mit zwei Spalten oder so).
Schlecht:
- Keine flexible Möglichkeit, unterschiedliche Layouts mit unterschiedlicher Ausrichtung zu erstellen
- nicht so gut bei der Verwendung von Fragmenten
Aber wenn wir keine unterschiedlichen Layouts verwenden, warum nicht?
android
android-layout
Mikooos
quelle
quelle
Antworten:
Schneller Hintergrund
Wenn bestimmte wichtige Konfigurationsänderungen unter Android vorgenommen werden (ein häufiges Beispiel ist eine Änderung der Ausrichtung), startet Android die ausgeführte Aktivität standardmäßig vollständig neu, um sie an solche Änderungen anzupassen.
Wenn Sie
android:configChanges="keyboardHidden|orientation"
in Ihrem AndroidManifest definieren , sagen Sie Android: "Bitte führen Sie den Standard-Reset nicht durch, wenn die Tastatur herausgezogen oder das Telefon gedreht wird. Ich möchte dies selbst erledigen. Ja, ich weiß, was ich tue." ""Ist das eine gute Sache? Wir werden bald sehen ...
Keine Sorge?
Einer der Profis, mit denen Sie beginnen, ist, dass es Folgendes gibt:
In vielen Fällen glauben Menschen fälschlicherweise, dass sie einen Fehler, der durch eine Orientierungsänderung ("Rotation") erzeugt wird, einfach durch Einfügen beheben können
android:configChanges="keyboardHidden|orientation"
.Android: configChanges = "keyboardHidden | Orientierung" ist jedoch nichts anderes als ein Pflaster. In Wahrheit gibt es viele Möglichkeiten, wie eine Konfigurationsänderung ausgelöst werden kann. Wenn der Benutzer beispielsweise eine neue Sprache auswählt (dh das Gebietsschema hat sich geändert), wird Ihre Aktivität auf die gleiche Weise neu gestartet wie durch eine Änderung der Ausrichtung. Wenn Sie möchten, können Sie eine Liste aller verschiedenen Arten von Konfigurationsänderungen anzeigen .
Bearbeiten : Noch wichtiger ist jedoch, dass, wie Hackbod in den Kommentaren hervorhebt , Ihre Aktivität auch neu gestartet wird, wenn sich Ihre App im Hintergrund befindet und Android beschließt, Speicherplatz freizugeben , indem es sie beendet. Wenn der Benutzer zu Ihrer App zurückkehrt, versucht Android, die Aktivität auf die gleiche Weise neu zu starten, wie dies bei einer anderen Konfigurationsänderung der Fall war. Wenn Sie damit nicht umgehen können, wird der Benutzer nicht glücklich sein ...
Mit anderen Worten, die Verwendung
android:configChanges="keyboardHidden|orientation"
ist keine Lösung für Ihre "Sorgen". Der richtige Weg ist, Ihre Aktivitäten so zu codieren, dass sie mit jedem Neustart von Android zufrieden sind. Dies ist eine gute Vorgehensweise, die Ihnen später helfen wird. Gewöhnen Sie sich also daran.Wann sollte ich es verwenden?
Wie Sie bereits erwähnt haben, gibt es einen deutlichen Vorteil. Das Überschreiben der Standardkonfigurationsänderung für eine Rotation durch selbstes Behandeln beschleunigt die Arbeit. Diese Geschwindigkeit ist jedoch mit einem Preis für Bequemlichkeit verbunden.
Um es einfach auszudrücken: Wenn Sie für Hoch- und Querformat dasselbe Layout verwenden, sind Sie durch Überschreiben in guter Verfassung. Anstelle eines vollständigen Neuladens der Aktivität werden die Ansichten einfach verschoben, um den verbleibenden Platz zu füllen.
Allerdings , wenn Sie aus irgendeinem Grunde ein anderes Layout verwenden , wenn das Gerät im Querformat ist die Tatsache , dass Android Ihre Aktivität neu geladen ist gut , weil es dann das richtige Layout laden. [Wenn Sie die Überschreibung für eine solche Aktivität verwenden und zur Laufzeit ein magisches Neulayout durchführen möchten ... nun, viel Glück - es ist alles andere als einfach]
Kurze Zusammenfassung
Wenn
android:configChanges="keyboardHidden|orientation"
es für Sie richtig ist, verwenden Sie es auf jeden Fall . Aber BITTE sicher sein , zu testen , was passiert , wenn etwas ändert, da eine Orientierungsänderung nicht der einzige Weg ist , kann eine volle Aktivität Neustart ausgelöst werden.quelle
Please don't do the default reset when the keyboard is pulled out
Ich habe noch nie einen Neustart der Aktivität für das Herausziehen der Tastatur gesehen !Aus meiner Sicht: Wenn das Layout sowohl im Quer- als auch im Hochformat gleich ist, können Sie auch eine der beiden Optionen in Ihrer App deaktivieren.
Der Grund, warum ich dies sage, ist, dass ich als Benutzer erwarte, dass die App mir einen gewissen Nutzen bringt, wenn ich die Ausrichtung ändere. Wenn es keine Rolle spielt, wie ich mein Telefon halte, brauche ich keine Wahl.
Nehmen Sie zum Beispiel eine App, in der Sie eine ListView haben, und wenn Sie auf ein ListItem klicken, möchten Sie eine detaillierte Ansicht für dieses Element erhalten. Im Querformat können Sie dies tun, indem Sie den Bildschirm in zwei Teile teilen, wobei die ListView links und die Detailansicht rechts angezeigt werden. In Portrait haben Sie die Liste auf einem Bildschirm und ändern dann den Bildschirm in die Detailansicht, wenn ein ListItem ausgewählt ist. In diesem Fall ist eine Änderung der Ausrichtung sowie unterschiedliche Layouts sinnvoll.
quelle
Ich verstehe nicht warum ... gelegentliche Neustarts sind meiner Meinung nach in Ordnung ... configChanges behandelt die meisten Fälle für mich ... nun, vielleicht kann dies in einigen Arten von Anwendungen ein Problem sein, aber es hängt wirklich von der Art der App ab und davon, wie Sie sie wiederherstellen Zustand beim Neustart der App ... Wenn einer meiner App neu gestartet wird, wird der Benutzer zurückgemeldet und die letzte Aktivität wird durch meinen Code geöffnet, und der Benutzer verliert einige Schritte, um dorthin zurückzukehren, wo er war, aber keine große Sache. In einem anderen Zustand bleibt der Zustand immer bestehen und Ein Zustand wird beim Neustart immer wiederhergestellt. Beim Neustart der Aktivität musste es sein, dass die App nicht verwendet wurde oder so ... also überhaupt kein Problem ... Im Spiel kann dies beispielsweise ein Problem sein oder in einer anderen Art von App, die ich nicht kenne ...
Ich sage, wenn Sie dies auf diese Weise tun, funktionieren Anwendungen unter normalen Umständen einwandfrei. Und Code ist viel besser lesbar, ohne dass jede Menge Logik zum Speichern und Wiederherstellen benötigt wird, wo Sie nur neue Fehler machen können und ihn die ganze Zeit warten müssen ... sicher, wenn Android aus der Stromversorgung gerät und Ihr Anwendungsfenster beendet, verliert es den Kontext und fängt wieder an, aber das passiert nur in besonderen Situationen und auf neueren Geräten glaube ich, dass dies immer seltener wird ...
Also töte mich, aber ich benutze dies für alle Anwendungen ziemlich erfolgreich ... android: configChanges = "Gebietsschema | Tastatur | Tastatur versteckt | Ausrichtung | Bildschirmlayout | uiMode | Bildschirmgröße | kleinste Bildschirmgröße" Aber ich verstehe, dass dies für eine bestimmte Art von Anwendungen möglicherweise nicht der Fall ist Guter Weg, aber die meisten Apps können damit leben, nur OK.
quelle
Ja, ich denke, eine Pause macht es schneller als das Loslassen des Players. Habe trotzdem die Pause.
Habe jetzt eine Lösung gefunden, die das Lied nicht pausiert.
Geben Sie im Manifest an, dass Sie die Konfigurationsänderung für die Bildschirmausrichtung behandeln, und verwenden Sie dann die onConfigurationChanged-Methode, um die Layoutdatei zu laden. Auf diese Weise kann ich in logCat sehen, dass onPause, onCreate & onResume nicht aufgerufen werden und der Song daher nicht angehalten wird.
Aktualisieren Sie das Manifest, um die Ausrichtung zu handhaben.
Fügen Sie diesen Code hinzu
quelle