Android SystemUI glitches in Lollipop-ThrowExceptions

Exception or error:

This bug only occurs on my Nexus 5 and my Nexus 7 running Lollipop.

EDIT

This bug also occurs in the new Inbox app by Google, when I’m going into Inbox > Settings > Notifications > any item and go back

/EDIT

  • compileSdkVersion 21
  • buildToolsVersion 21.1.1
  • compile ‘com.android.support:appcompat-v7:21.0.2’

I’m having a GalleryActivity that shows multiple images, once per page (inside a ViewPager. When I hit the back button, sometimes the Android’s SystemUI have glitches.

Normal view

normal

Glitched view

glitched

See how the views repeats themselves, and inside the system itself?

A simple touch event brings back the normal SystemUI views.

What is going on?

Might be similar to:

How to solve:

Setting android:hardwareAccelerated="false" is a kind of extreme solution, as graphical performance is likely to be very bad.

If you can pinpoint the view that is misbehaving and causing this issue, a better fix would be to switch it to software rendering instead, via setLayerType(), e.g.

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Funny thing is, I haven’t experienced any rendering glitches with Lollipop so far, but we did see them in KITKAT (as mentioned in this question), and only when WebViews are present on the screen.

I would recommend experimenting with toggling this on different views until the problem is isolated (especially if it’s easy to reproduce).


So far, every occurence of this issue has been related to WebViews (or components that use WebView, such as AdMob). According to the AOSP Issue Tracker the problem is fixed in Android 5.0, but it doesn’t seem to be the case.

###

I’ve seen UI glitches with Lollipop, though different than yours. The only workaround I found was disabling hardware acceleration:

android:hardwareAccelerated="false"

at the Activity or Application level. If this resolves your glitches, make sure to report this to Google as this would indicate a bug in the platform. There is already at least one open report with them already.

I certainly wouldn’t want to deploy an application with this setting, it’s really only intended to answer the WHY and help prove that it’s not a bug in your code.

Hope this helps!

EDIT 12/10/2014:

@matiash offered a much more precise answer than this “sledgehammer” suggestion. I was seeing drawing glitches mostly on the ActionBar in a multi-tab app with ViewPager, and always on tabs/pages without any WebView at all. However, one of my tabs/fragments does have an embedded WebView, and when setting it to software rendering, my glitches appear to have gone away. I’m not at all uncomfortable putting the workaround suggested by @matiash in a shipping app…though it still points to some underlying issue in the platform.

###

I have also witnessed this problem in my own app.

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

Not only did I get that kind of visual static, but also repeated drawing. Only witnessed it on Nexus 5 with 5.0 when developing with api 21 and support library 21.0.+.

For me its not very reproducible. It will happen repeatedly during one session of use, but the next day I won’t be able to reproduce it.

I am not using any WebViews (accept maybe via admob). I am using ViewPagers with fragments. I am also using DragSortList and first started seeing the issue in Activities that used it.

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

How reproducible is it for you guys?

###

have you tried to set android:fitsSystemWindows="true" in your Fragment layout? this will make sure the layout is below the statusBar, im not really sure about the navigation buttons but i guess this should work for it too.

###

Call request layout on DecorView after rendering:

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

I call it using postDelay() in WebViewClient.onPageFinished(). It’s not a perfect solution (just a workaround) but maybe better way like LAYER_TYPE_SOFTWARE.

###

………go to settings and then developer options(if they are not visible… go to about phone then click on build number 7-10 times and developer mode will be on) and there scroll down and untick ‘show layout bounds’ and you are done. its simple and easy.

Leave a Reply

Your email address will not be published. Required fields are marked *