Edited mehr Details hinzuzufügen: (ursprünglich fragt vor fast zwei Monaten ... hat noch keine Lösung gefunden)Erzwingen Sie eine Aktivität im Vollbildmodus, um bei der Fortsetzung erneut zu messen/neu zu zeichnen?
Ich habe eine Tätigkeit mit einer etwas komplizierten Ansicht. Technisch gesehen nicht kompliziert ... da ist gerade viel los. Alle Aktivitäten in dieser bestimmten App sind auf FullScreen NoTitleBar eingestellt und alle sind auf Querformat ausgerichtet. Ich bemerkte schon früh in der Entwicklung, als die App ausgeblendet wurde und dann wieder aktiv war. Es gab eine seltene Tendenz, dass das Layout vertikal nach unten rutschte, als ob es Platz für die Titelleiste und die Statusleiste schaffen würde.
Später in der Entwicklung ruft die App nun zu verschiedenen externen Absichten. Ich merke jetzt, dass es mehr eine Tendenz gibt, diese gleiche Verschiebung zu machen, wenn ich von einer extern gehandhabten abgefeuerten Absicht fortfahre (wie das Erstellen einer "Auswahl" Absicht oder die Auswahl eines Bildes). Ich kann es mit genau den gleichen Schritten inkonsistent reproduzieren ... manchmal passiert es manchmal nicht. Es scheint, als gäbe es zwischen verschiedenen Phasen des Messens und Auslegens eine Wettlaufsituation. Ich gehe davon aus, dass einer dieser Schritte, die das System für mich ausführt, ist, nach Vollbild und Nichtlibelle zu suchen und die notwendige Verschiebung vorzunehmen. Dies passiert wahrscheinlich in einigen Fällen zu spät.
Ich habe eine Reihe von Protokollierung und Aufrufe von invalidate(), requestLayout(), etc. versucht, vielleicht die Race-Bedingung zu fangen, aber das Problem scheint außerhalb meiner Layouts. Die oberen() und unteren() Werte meines Root-Layouts sind immer 0 und die Höhe meines Bildschirms, selbst wenn ich dies protokolliere, während das Problem auftritt.
Gibt es eine andere Methode des Fensters, WindowManager oder jedes andere systemansichtsbezogene Objekt, das ich eine vollständige erneute Messung erzwingen, neu zeichnen, erneut auf aktuelle Thema/Stil Flags überprüfen kann?
Also, in Ihrem Fall passiert es auch manchmal und nicht andere? In dem Fall, in dem das Problem nicht auftritt (Fenster ist bei Wiederaufnahme ordnungsgemäß Vollbild), verursacht dies auch ein Flimmern? Oder ist es nur, wenn das Problem auftritt und diese Situation es behebt? Was saugt ist, dass es keine Möglichkeit gibt, das Auftreten zur Laufzeit zu erkennen und diesen Code bedingt auszuführen. Ich werde das in meiner App testen und Sie wissen lassen, ob es funktioniert. Vielen Dank! – Rich
@Rich: es passiert im Emulator sehr reproduzierbar (fast immer) auf Geräten erscheint es weniger häufig (je nach Gerät denke ich). Flimmern/springen, wenn das Problem auftritt. (Ich habe regelmäßig Flimmern auf einem Bildschirm, aber ich denke, es ist ein anderes Problem) –
Ja ... das scheint die beste Lösung zu sein. Danke noch einmal. – Rich