Lollipop上共享元素转换中的Webview故障

5
我刚刚开始使用appcompat支持库重建我的Android 5.0应用程序。我刚刚完成了一个过渡特效,其中包含共享元素。它似乎运行良好,直到我添加了一个webview
我制作了一个视频来演示这个故障。https://www.youtube.com/watch?v=MuuGZc0Vwow 正如您所看到的,当我打开活动时,一切都很好。当我关闭它时,故障发生了。您可以看到所有元素都像应该做的那样淡出,除了webview。它只是挂在那里,直到动画结束,破坏了整个动画流畅性。
我该如何解决这个问题?如果可能与我设置的方式有关,我很乐意分享一些代码。
提前致谢。

这只是一个猜测,但是尝试在你的第二个活动的onCreate()方法中调用webview.setTransitionGroup(true) - Alex Lockwood
说实话,我有点困惑,因为它现在似乎表现得非常不一致。无论如何,这是堆栈跟踪:http://pastebin.com/viv5nsgv - Vic V
这是由调用 setTransitionGroup() 引起的吗?还是在启动活动转换时发生的? - Alex Lockwood
这是我遇到的另一个错误。我不知道是什么决定了这个或者之前那个错误:http://pastebin.com/qkkgPdM7当我移除 setTransitionGroup() 时,就没有崩溃了。 - Vic V
1
希望George Mount能看到这个问题并提供一些见解,为什么会发生崩溃...虽然似乎是Android内部图形管道的问题,而不是Android的转换框架。 - Alex Lockwood
显示剩余2条评论
2个回答

7
这个故障发生的原因是WebView extends AbsoluteLayout。默认情况下,没有"transition group"并且没有背景可绘制的ViewGroup将不会被活动窗口内容转换动画化。为了修复WebView的故障,您需要调用webView.setTransitionGroup(true)(或使用android:transitionGroup="true"在XML中设置属性)。这应该会导致WebView在活动转换中淡出,而不是简单地坐在那里,直到在过渡结束时被突然移除。
至于您收到的"无法为WebView创建图层"错误,我想那是因为转换框架在转换期间自动为WebView创建硬件层,由于某种原因,框架在尝试创建图层时崩溃了。这听起来像是与Android内部图形管道完全无关的另一个问题......如果没有更多信息,我不确定我能给出一个好的答案来解释崩溃发生的原因。
这个问题也在这篇博客文章的底部讨论过。

好的,感谢你花时间解释这些事情。XML属性和Java语句都导致相同的崩溃。但正如我所说,这是不一致的,我不明白。有一次,我看到它可以工作,但九成以上的时间都是随机崩溃。这里有一个视频以进一步说明:https://www.youtube.com/watch?v=HLfgwaeJXDc - Vic V
3
android:transitionGroupWebView 移动到其父元素后,崩溃和故障都已消失。我仍然不确定发生了什么,但感谢您抽出时间解释并指引我正确的方向! - Vic V

0

我在Marshmallow版本的webview中遇到了这种随机崩溃问题。我添加了属性android:transitionGroup="true",但仍然发生崩溃。之后,在声明该活动的清单中添加了android:hardwareAccelerated="false"。此后,在Marshmallow版本和更低版本中,随机崩溃问题已得到解决。


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