1

我有一个非常奇怪的 NullPointerException (仅在 Android 4.1 上发生,既不在 ICS 也不在 Jelly Bean 4.2 上)编辑:仅在三星触控设备上。

按下按钮时,我从我的一个内部启动一个 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 元素?(我正在使用支持包、FragmentLayouts 和 android.support.v4.view.ViewPager)

//只是在完全不同的环境中遇到了同样的问题。我想它必须与 ViewPager/PageAdapter

4

1 回答 1

1

我找到了解决方案:

我们将Quick Actions Pop用于触发电话呼叫的菜单。在开始通话之前,我在 PopupWindow 上调用了dismiss。

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

    mRoot.startAnimation(shrinkAnimation);
}

如您所见,触发动画以关闭快速操作弹出窗口。我猜三星 Touch 在动画手完成之前破坏了后台的 Activity。删除动画并调用super.dismiss()反而解决了问题。

但同样:此错误仅发生在 Samsung Touch 设备上。

于 2013-06-29T08:48:30.777 回答