2014-11-27 1 views
20

Dieser Fehler nur tritt auf meinem Nexus 5 und meinem Nexus 7 unter Lollipop.Android SystemUI Störungen in Lollipop

EDIT

Dieser Fehler tritt auch in den neuen Inbox App von Google , wenn ich in Inbox gehe> Einstellungen> Benachrichtigungen> jedes Element und gehen Sie zurück ...

/EDIT

  • com pileSdkVersion 21
  • buildToolsVersion 21.1.1
  • Kompilierung 'com.android.support:appcompat-v7:21.0.2'

Ich bin ein GalleryActivity, die mehrere Bilder zeigt, einmal pro Seite (innen a ViewPager. Wenn ich den Zurück-Knopf drücke, hat manchmal die SystemUI des Androids Störungen.

Normalansicht

normal

Glitched Ansicht

glitched

Sehen Sie, wie die Ansichten wiederholt sich, und im Inneren des Systems selbst?

Ein einfaches Touch-Ereignis bringt die normalen SystemUI-Ansichten zurück.

Was ist los?

könnte ähnlich sein:

+0

Nur zur Verdeutlichung, das ist das Problem in Google Android Problem Tracker: https://code.google.com/p/android/issues/detail?id=81832&q=systemui%20transparent&colspec=ID%20Type%20Status% 20Owner% 20Summary% 20Stars – Hakkar

Antwort

17

Einstellung android:hardwareAccelerated="false" ist eine Art extreme Lösung, da die grafische Leistung wahrscheinlich sehr schlecht ist.

Wenn Sie die Ansicht, die sich schlecht benimmt und dieses Problem verursacht, lokalisieren können, wäre es eine bessere Lösung, sie stattdessen über setLayerType(), z.

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Lustige Sache ist, habe ich erfahren keine Rendering Pannen mit Lollipop so weit, aber wir haben sie in KITKAT sehen (wie in this question erwähnt), und nur dann, wenn WebViews vorhanden sind auf dem Bildschirm.

Ich würde das Experimentieren mit dem Umschalten dieser auf verschiedenen Ansichten empfehlen, bis das Problem isoliert ist (besonders wenn es einfach zu reproduzieren ist).


Bisher hat jedes Auftreten dieses Problems wurde auf WebViews (oder Komponenten, die WebView verwenden, wie AdMob) bezogen. Laut the AOSP Issue Tracker ist das Problem in Android 5.0 behoben, aber es scheint nicht der Fall zu sein.

+0

Interessanterweise scheint dies in der Tat mit 'WebView' verwandt zu sein ... – shkschneider

+0

Ich hoffe, eine Korrektur von Google zu beheben ... Wie auch immer, danke. – shkschneider

+0

@shkschneider Ja, ich würde es auch hoffen. Aber da es vor einer Weile gebrochen war und es keine Rückmeldung gab, würde ich nicht den Atem anhalten. Wir haben diese hässliche Problemumgehung schon seit einiger Zeit übernommen. :( – matiash

0

haben Sie versucht android:fitsSystemWindows="true" in Ihrem Fragment Layout einstellen? dies wird sicherstellen, dass das Layout unter der statusBar ist, bin ich nicht wirklich sicher über die Navigationstasten, aber ich denke, das sollte auch funktionieren.

+0

Netter Punkt. Aber es stört leider genauso ... – shkschneider

+0

das ist verdammt komisch. wie es genau passiert? Gibt es irgendein Szenario, dass es darauf passiert? – k0sh

+0

Es passiert meistens, wenn ich ein großes Bild betrachte. Aber wie in meiner Frage gesagt, reproduzierte ich denselben Fehler (SystemUI wird transparent) auf der neuen Inbox-App von Google ... – shkschneider

2

Ich habe Probleme mit UI mit Lollipop, obwohl anders als deins gesehen. Die einzige Abhilfe ich gefunden wurde, zu deaktivieren Hardware-Beschleunigung:

android:hardwareAccelerated="false" 

an der Aktivität oder Anwendungsebene. Wenn dadurch Ihre Fehler behoben werden, melden Sie dies bitte Google, da dies auf einen Fehler in der Plattform hinweisen würde. Es gibt bereits mindestens einen offenen Bericht mit ihnen.

Ich würde sicherlich nicht eine Anwendung mit dieser Einstellung bereitstellen möchten, es ist wirklich nur beabsichtigt, das WHY zu beantworten und zu beweisen, dass es kein Fehler in Ihrem Code ist.

Hoffe, das hilft!

EDIT 2014.12.10:

@matiash eine viel präzisere Antwort als diese "Vorschlaghammer" Vorschlag angeboten. In einer Multi-Tab-App mit ViewPager, und immer auf Tabs/Seiten ohne WebView, sah ich Probleme beim Zeichnen von Pannen auf der ActionBar. Eines meiner Tabs/Fragmente enthält jedoch ein eingebettetes WebView, und wenn ich es auf Software-Rendering einstelle, scheinen meine Störungen verschwunden zu sein. Es ist mir überhaupt nicht unangenehm, die von @matiash in einer Versand-App vorgeschlagene Problemumgehung zu verwenden ... obwohl es immer noch auf ein zugrunde liegendes Problem in der Plattform hinweist.

+0

Sie denken also, wie ich, dass dies ein Plattform-/Framework-Bug ist? – shkschneider

+0

Ich habe reproduzierbare Störungen, die dem von Ihnen gezeigten Link "Google Maps-Fragment in einem ViewPager" sehr ähnlich sind. Das Deaktivieren der Hardwarebeschleunigung hat es behoben. Ich habe mich an Google gemeldet und warte immer noch auf Feedback. Nicht sicher, ob Ihr Problem das gleiche ist, aber es ist einfach genug zu versuchen ... – CSmith

+0

Deaktivieren der Hardware-Beschleunigung (so extrem wie dies für eine "Reparatur" ist) scheint dieses Problem zu verhindern, macht aber auch jede Lollipop-Animationen (wie Wellen) sehr langsam und so ein bisschen hässlich ... – shkschneider

1

Ich habe dieses Problem auch in meiner eigenen App erlebt.

Any Android devs ever experience this kind of visual static? (see picture)

Nicht nur kam ich diese Art der visuellen statisch, sondern auch Zeichnung wiederholt. Nur bei Nexus 5 mit 5.0 bei der Entwicklung mit api 21 und der Support-Bibliothek 21.0. +.

Für mich ist es nicht sehr reproduzierbar. Es wird wiederholt während einer Sitzung des Gebrauches geschehen, aber am nächsten Tag werde ich es nicht reproduzieren können.

Ich verwende keine WebViews (akzeptieren Sie vielleicht über admob). Ich benutze ViewPagers mit Fragmenten. Ich verwende auch DragSortList und begann das Problem zuerst in Aktivitäten zu sehen, die es verwendet haben.

https://github.com/bauerca/drag-sort-listview

Wie reproduzierbar ist es für euch?

-1

......... gehen Sie zu den Einstellungen und dann Entwickleroptionen (wenn sie nicht sichtbar sind ... gehen Sie zu Telefon und klicken Sie dann auf Build-Nummer 7-10 Mal und Entwickler-Modus wird eingeschaltet) und Dort scrollen Sie nach unten und entfernen Sie die Markierung, um die Layoutgrenzen anzuzeigen, und Sie sind fertig. Es ist einfach und einfach.

+0

Die Frage bezieht sich auf die Grafiken, die in den System-UI-Bereichen (Systemschaltflächen und Systemleiste) angezeigt werden, nicht auf die Layoutgrenzen. – akiraspeirs

0

Anruf Anfrage Layout auf DecorView nach dem Rendern:

getActivity().getWindow().getDecorView().requestLayout(); 

Ich nenne es postDelay() in WebViewClient.onPageFinished() verwenden. Es ist keine perfekte Lösung (nur ein Workaround), aber vielleicht besser als LAYER_TYPE_SOFTWARE.