1

非常に奇妙なNullPointerExceptionがあります(Android 4.1でのみ発生し、ICSでもJelly Bean 4.2でも発生しません)編集:SamsungTouchデバイスでのみ発生します。

ボタンを押すと、次のように自分の1つから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 Exceptionの原因となる可能性のあるヒントはありますか?忙しいメインスレッドに?互換性のないUI要素?(サポートパッケージ、FragmentLayouts、およびandroid.support.v4.view.ViewPagerを使用しています)

//まったく異なるコンテキストで同じ問題が発生しました。私はそれがViewPager/PageAdapterで何かをしなければならないと思います

4

1 に答える 1

1

私は解決策を見つけました:

通話がトリガーされるメニューにクイック アクション ポップを使用していました。呼び出しを開始する前に、PopupWindow で Dismiss を呼び出します。

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

    mRoot.startAnimation(shrinkAnimation);
}

ご覧のとおり、クイック アクション ポップを閉じるためにアニメーションがトリガーされます。アニメーションの手が終了する前に、Samsung Touch がバックグラウンドでアクティビティを破壊したと思います。アニメーションを削除して代わりに呼び出すとsuper.dismiss()、問題が解決しました。

繰り返しになりますが、このエラーは Samsung Touch デバイスでのみ発生しました。

于 2013-06-29T08:48:30.777 に答える