安卓棒棒糖操作系统活动界面显示异常

9
我使用Android Lollipop SDK(21)构建我的应用程序。在打开和关闭一些活动之后,一个活动会出现这种破坏性的屏幕。它看起来像是内存错误,但这只会在Android Lollipop设备上发生。在Logcat中我看不到错误。
有任何想法是什么原因导致这个问题?

你的应用程序中是否有 WebView(或 AdView)小部件?你有没有查看过 https://dev59.com/x14d5IYBdhLWcg3wG_WH ? - matiash
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 解决了这个问题。 - Surendra Kumar
3个回答

5

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);可以解决这个问题。


谢谢,这对我的应用程序起作用了,它使用了 WebView。我也遇到了和 @Zenco 指出的完全相同的问题。(我使用的是运行 Lollipop 5.0.1 的 Nexus 5)将 LayerType 设置为 TYPE SOFTWARE 对我很有帮助。 :-) - Anthony De Souza

1

这也应该在4.4上发生。尝试始终为您的片段或活动分配背景。 更新 有人尝试使用透明的背景,但它没有起作用。


你知道为什么会发生这种情况吗? - Zenco
我不确定,我猜测这可能是SDK中某种图形问题导致的。你试过了吗?@Zenco? - MineConsulting SRL
你是否在styles.xml中为所有活动设置了活动背景? <item name="android:windowBackground">@drawable/my_background</item> - Zenco
切换到软件渲染不是解决方案。 - Martin Konecny
对我有用,你也可以试试:https://dev59.com/nIbca4cB1Zd3GeqPcO5t#28132032 - Kenny Dabiri
显示剩余10条评论

1

解决方案

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

虽然这个方法可以解决问题,但对于只有在5.0版棒棒糖上的Nexus设备才适用的问题来说,这有点过于浪费。为什么要惩罚所有手机型号呢?

boolean isLollipop = android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP;
boolean isNexus = android.os.Build.MODEL.toLowerCase().contains("nexus");

if (isLollipop && isNexus) {
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

这段代码假定谷歌会在下一个操作系统版本中修复问题。 编辑 自5.1版本以来,已经解决了这个问题,这段代码可以处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接