Android系统在Lollipop中出现故障

这个错误发生在我的Nexus 5和运行Lollipop的 Nexus 7上。

编辑

当我进入收件箱>设置>通知>任何项目并返回时, Google的新收件箱应用中也会出现此错误…

/编辑

  • compileSdkVersion 21
  • buildToolsVersion 21.1.1
  • 编译’com.android.support:appcompat-v7:21.0.2′

我有一个GalleryActivity ,显示多个图像,每页一次(在ViewPager内部。当我点击后退按钮时,有时Android的SystemUI会出现故障。

普通视图

正常

Glitched视图

glitched

看看这些观点如何重复,并在系统内部重演?

简单的触摸事件会恢复正常的SystemUI视图。

到底是怎么回事?

可能类似于:

  • Android 5屏幕故障/静态与Viewpager内的Google Maps Fragment
  • Android Lollipop活动屏幕已损坏

Solutions Collecting From Web of "Android系统在Lollipop中出现故障"

设置android:hardwareAccelerated="false"是一种极端的解决方案,因为图形性能可能非常糟糕。

如果您可以查明行为不正常的视图并导致此问题,则更好的解决方法是将其切换为软件渲染,而不是通过setLayerType() ,例如

 view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

有趣的是,到目前为止我还没有遇到任何Lollipop的渲染故障,但我们确实在KITKAT中看到了它们(如本问题中所述 ),并且只有当WebView存在于屏幕上时才会出现。

我建议尝试在不同的视图上切换它,直到问题被隔离(特别是如果它很容易重现)。


到目前为止,此问题的每个出现都与WebView(或使用WebView的组件,如AdMob)有关。 根据AOSP问题跟踪器 ,问题在Android 5.0中得到修复,但似乎并非如此。

我看过棒棒糖的UI故障,虽然与你的不同。 我find的唯一解决方法是禁用硬件加速:

 android:hardwareAccelerated="false" 

在活动或应用程序级别。 如果这可以解决您的故障,请务必向Google报告,因为这会表明平台中存在错误。 已经有至少一份公开报告。

我当然不希望使用此设置部署应用程序,它实际上只是为了回答WHY并帮助certificate它不是代码中的错误。

希望这可以帮助!

编辑12/10/2014:

@matiash提供了比这个“大锤”建议​​更精确的答案。 我在使用ViewPager的多标签应用程序中看到主要在ActionBar上绘制故障,并且总是在没有任何WebView的标签/页面上。 但是,我的一个标签/片段确实有一个嵌入式WebView,当它设置为软件渲染时,我的故障似乎消失了。 我把@matiash建议的解决方法放在一个发货应用程序中并不是很不舒服……虽然它仍然指向平台中的一些潜在问题。

我也在自己的应用程序中目睹了这个问题。

任何Android开发者都曾经历过这种视觉静态吗? (见图)

我不仅获得了那种视觉静态,而且还重复绘制。 只有在使用api 21和支持库21.0开发时,才能在Nexus 5 5.0上见证它。

对我来说,它不是很可重复。 它将在一次使用期间反复发生,但第二天我将无法重现它。

我没有使用任何WebViews(可能通过admob接受)。 我正在使用带有片段的ViewPagers。 我也在使用DragSortList,并且首先在使用它的Activities中看到了这个问题。

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

这对你们来说有多重复?

你试过在Fragment布局中设置android:fitsSystemWindows="true"吗? 这将确保布局低于statusBar ,我不确定导航按钮,但我想这也适用于它。

渲染后在DecorView上调用请求布局:

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

我在WebViewClient.onPageFinished()使用postDelay()调用它。 这不是一个完美的解决方案(只是一种解决方法),但也许更好的方式,如LAYER_TYPE_SOFTWARE。

………转到设置,然后转到开发人员选项(如果它们不可见…转到关于手机然后点击内部版本号7-10次,开发人员模式将打开)然后向下滚动取消’show layout bounds’,你就完成了。 它简单易行。