我的Android应用程序崩溃报告服务报告了许多实例:
java.lang.RuntimeException: Callbacks must set parent bounds in populateNodeForVirtualViewId()
at iv.a(SourceFile:56)
at iw.a(SourceFile:716)
at hq.a(SourceFile:112)
at hw.createAccessibilityNodeInfo(SourceFile:42)
at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchAccessibilityNodeInfos(AccessibilityInteractionController.java:724)
at android.view.AccessibilityInteractionController.findAccessibilityNodeInfoByAccessibilityIdUiThread(AccessibilityInteractionController.java:147)
at android.view.AccessibilityInteractionController.access$300(AccessibilityInteractionController.java:49)
at android.view.AccessibilityInteractionController$PrivateHandler.handleMessage(AccessibilityInteractionController.java:971)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5140)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
at dalvik.system.NativeStart.main(Native Method)
感觉与我没有真正注意到的可访问性问题有关,但我如何开始解决这个问题?调用堆栈没有指向任何方向
我尝试添加一个contentdescription xml标签到所有的地方在我的代码,lint告诉我它丢失了,但它没有帮助
编辑:发现了这个问题,当我在地图片段上方显示StreetViewPanoramaFragment时,当触摸探索(反馈?)被启用时,崩溃发生了。
我不知道是什么原因,我想我应该打开一个单独的更有针对性的问题
发现问题,当我在地图片段上方显示StreetViewPanoramaFragment时,当触摸探索(反馈?)被启用时,崩溃发生。
我不知道是什么原因,我想我应该打开一个单独的更有针对性的问题
问题是"我如何开始修复这个问题?",所以我会说:开始查看框架代码。
我可以追踪到createAccessibilityNodeInfo()
实际上来自View.createAccessibilityNodeInfo()
。
也搜索"回调必须在populateNodeForVirtualViewId()中设置父边界"我发现这是在类ExploreByTouchHelper.java中的第395行调用的。
在不了解代码的情况下我不能说更多,但这是一个很好的起点。
这可能是在ICS之前的android版本中运行时支持v4库中的错误。运行时异常由explorbytouchhelper抛出
393 node.getBoundsInParent(mTempParentRect);
394 if (mTempParentRect.isEmpty()) {
395 throw new RuntimeException("Callbacks must set parent bounds in "
396 + "populateNodeForVirtualViewId()");
397 }
node.getBoundsInParent
调用是在一个AccessibilityNodeInfoImpl实现基于android版本的代码运行,你可以看到在AccessibilityNodeInfoCompat
755 static {
756 if (Build.VERSION.SDK_INT >= 19) { // KitKat
757 IMPL = new AccessibilityNodeInfoKitKatImpl();
758 } else if (Build.VERSION.SDK_INT >= 18) { // JellyBean MR2
759 IMPL = new AccessibilityNodeInfoJellybeanMr2Impl();
760 } else if (Build.VERSION.SDK_INT >= 16) { // JellyBean
761 IMPL = new AccessibilityNodeInfoJellybeanImpl();
762 } else if (Build.VERSION.SDK_INT >= 14) { // ICS
763 IMPL = new AccessibilityNodeInfoIcsImpl();
764 } else {
765 IMPL = new AccessibilityNodeInfoStubImpl();
766 }
767 }
768
769 private static final AccessibilityNodeInfoImpl IMPL;
似乎可访问性nodeinfostubimpl是一个空存根,所以你可以尝试在模拟器中运行的东西<</p>
如何开始修复这个问题?
第一步是去混淆你的stacktrace
. lang。回调必须设置父边界populatendeforvirtualviewid () at iv.a(SourceFile:56) atiw.a(SourceFile:716) at hq.a(SourceFile:112) athw.createAccessibilityNodeInfo(源文件:42)android.view.AccessibilityInteractionController AccessibilityNodePrefetcher.prefetchAccessibilityNodeInfos美元(AccessibilityInteractionController.java: 724)
作为参考,我得到了这个堆栈跟踪,它看起来像一个去混淆的版本:
java.lang.RuntimeException: Callbacks must set parent bounds in populateNodeForVirtualViewId()
at android.support.v4.widget.EdgeEffectCompat$EdgeEffectImpl.newEdgeEffect(SourceFile:56)
at android.support.v4.widget.EdgeEffectCompat$EdgeEffectLollipopImpl.a(SourceFile:717)
at android.support.v4.view.accessibility.AccessibilityNodeProviderCompatKitKat.a(SourceFile:112)
at android.support.v4.view.accessibility.AccessibilityRecordCompat$AccessibilityRecordImpl.createAccessibilityNodeInfo(SourceFile:42)
at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfVirtualNode(AccessibilityInteractionController.java:1092)
at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1002)
at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:998)
at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchAccessibilityNodeInfos(AccessibilityInteractionController.java:799)
at android.view.AccessibilityInteractionController.findAccessibilityNodeInfoByAccessibilityIdUiThread(AccessibilityInteractionController.java:155)
at android.view.AccessibilityInteractionController.access$400(AccessibilityInteractionController.java:53)
at android.view.AccessibilityInteractionController$PrivateHandler.handleMessage(AccessibilityInteractionController.java:1146)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
织物。IO还显示有一个街景线程正在运行:
thread
at java.lang.Object.wait(Object.java)
at com.google.maps.api.android.lib6.gmm6.streetview.bf.a()
at com.google.maps.api.android.lib6.gmm6.streetview.bf.run()