从调用返回时ViewRootImpl中出现NullPointerException(仅适用于Samsung Touch)



我有一个非常奇怪的NullPointerException(仅在Android 4.1上出现,既不在ICS上也不在果冻豆4.2上出现)编辑:仅在Samsung Touch设备上出现

按下按钮时,我从我的一个按钮中启动ACTION_CALL活动,如下所示:

final Uri dialInFormat = Uri.parse("tel:" + number + ",," + code + "#");
log.info("Starting call: " + dialInFormat);
Intent intent = new Intent(Intent.ACTION_CALL, dialInFormat);
startActivity(intent);

此时会显示"电话活动"并拨打该号码。但一旦我打完电话,回到我的应用程序并触摸屏幕,就会出现以下错误,应用程序就会被杀死:

(有时错误发生得更早,而手机仍在拨号)

02-10 13:55:37.470: E/UCE(13354): Uncaught Exception
02-10 13:55:37.470: E/UCE(13354): java.lang.NullPointerException
02-10 13:55:37.470: E/UCE(13354):   at android.view.ViewRootImpl.drawAccessibilityFocusedDrawableIfNeeded(ViewRootImpl.java:2431)
02-10 13:55:37.470: E/UCE(13354):   at android.view.ViewRootImpl.onHardwarePostDraw(ViewRootImpl.java:2059)
02-10 13:55:37.470: E/UCE(13354):   at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1182)
02-10 13:55:37.470: E/UCE(13354):   at android.view.ViewRootImpl.draw(ViewRootImpl.java:2275)
02-10 13:55:37.470: E/UCE(13354):   at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2147)
02-10 13:55:37.470: E/UCE(13354):   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1958)
02-10 13:55:37.470: E/UCE(13354):   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112)
02-10 13:55:37.470: E/UCE(13354):   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4518)
02-10 13:55:37.470: E/UCE(13354):   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
02-10 13:55:37.470: E/UCE(13354):   at android.view.Choreographer.doCallbacks(Choreographer.java:555)
02-10 13:55:37.470: E/UCE(13354):   at android.view.Choreographer.doFrame(Choreographer.java:525)
02-10 13:55:37.470: E/UCE(13354):   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
02-10 13:55:37.470: E/UCE(13354):   at android.os.Handler.handleCallback(Handler.java:615)
02-10 13:55:37.470: E/UCE(13354):   at android.os.Handler.dispatchMessage(Handler.java:92)
02-10 13:55:37.470: E/UCE(13354):   at android.os.Looper.loop(Looper.java:137)
02-10 13:55:37.470: E/UCE(13354):   at android.app.ActivityThread.main(ActivityThread.java:4898)
02-10 13:55:37.470: E/UCE(13354):   at java.lang.reflect.Method.invokeNative(Native Method)
02-10 13:55:37.470: E/UCE(13354):   at java.lang.reflect.Method.invoke(Method.java:511)
02-10 13:55:37.470: E/UCE(13354):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
02-10 13:55:37.470: E/UCE(13354):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
02-10 13:55:37.470: E/UCE(13354):   at dalvik.system.NativeStart.main(Native Method)
02-10 13:55:37.555: E/AndroidRuntime(13354): FATAL EXCEPTION: main
02-10 13:55:37.555: E/AndroidRuntime(13354): java.lang.NullPointerException
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.ViewRootImpl.drawAccessibilityFocusedDrawableIfNeeded(ViewRootImpl.java:2431)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.ViewRootImpl.onHardwarePostDraw(ViewRootImpl.java:2059)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1182)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2275)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2147)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1958)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4518)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.Choreographer.doFrame(Choreographer.java:525)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.os.Handler.handleCallback(Handler.java:615)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.os.Looper.loop(Looper.java:137)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at android.app.ActivityThread.main(ActivityThread.java:4898)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at java.lang.reflect.Method.invokeNative(Native Method)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at java.lang.reflect.Method.invoke(Method.java:511)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
02-10 13:55:37.555: E/AndroidRuntime(13354):    at dalvik.system.NativeStart.main(Native Method)

任何可能导致NullPointer异常的提示?要忙主线程吗?UI元素不兼容?(我使用的是supportPackage、FragmentLayouts和android.support.v4.view.ViewPager)

//只是在完全不同的背景下遇到了同样的问题。我想它必须与ViewPager/PageAdapter 有关

我找到了解决方案:

我们在触发电话的菜单中使用了Quick Actions Pop。在开始调用之前,我会在PopupWindow上调用disse。

public void dismiss() {
    AnimationSet shrinkAnimation = createAnimation(false);
    shrinkAnimation.setAnimationListener(mShrinkAnimationListener);
    mRoot.startAnimation(shrinkAnimation);
}

正如您所看到的,会触发一个动画来消除快速动作弹出。我猜Samsung Touch在动画手部完成之前就破坏了背景中的活动。删除anmiation并调用super.dismiss()反而解决了问题。

但再次强调:此错误仅发生在Samsung Touch设备上。

相关内容

最新更新