因为是维护之前的代码,然后友盟异常捕捉经常出现这个bug,也没提示具体的异常位置,就很尴尬。然后我就大量的查找资料。也不清楚是什么情况会出现的,没法重现就很尴尬。
java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mPrivateFlags' on a null object reference 5 at android.view.ViewGroup.resetCancelNextUpFlag(ViewGroup.java:2933) 6 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2832) 7 at android.view.View.dispatchPointerEvent(View.java:15167) 8 at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6879) 9 at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6658) 10 at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6095) 11 at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6152) 12 at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6118) 13 at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6283) 14 at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6126) 15 at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6340) 16 at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6099) 17 at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6152) 18 at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6118)at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6126) 20 at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6099) 21 at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:9235) 22 at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:9175) 23 at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:9132) 24 at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:9377) 25 at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:279) 26 at android.os.MessageQueue.nativePollOnce(Native Method) 27 at android.os.MessageQueue.next(MessageQueue.java:337) 28 at android.os.Looper.loopOnce(Looper.java:168) 29 at android.os.Looper.loop(Looper.java:299) 30 at android.app.ActivityThread.main(ActivityThread.java:8256) 31 at java.lang.reflect.Method.invoke(Native Method) 32 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576) 33 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073) 34Back traces ends.
然后我就去大量查找资料,看看有没有跟我一样的哥们遇到过。
结果就找到了关于分析这个问题的相关解答,如下:
1.离开页面时dialog未dismiss,当再次回到该页面时会出现这个问题;
2.异步回调中操作了UI但页面已经结束。
最后就是根据自己项目做的排除处理了。
说一下我项目的bug怎么解决的吧。它依赖了 https://github.com/razerdp/BasePopup 的BasePopup,然后每个人的写法可能会不一样。我就每个Popup都检查一遍,发现唯独有个类没写下面这个方法。
setBackPressEnable(false);
后面加上去。困扰了好几个礼拜的bug解决了。
下面是我查了好多资料,比较有用的。分享出来一下。如果有什么意见或者建议麻烦提出来,也希望有遇到问题的朋友,少走点弯路。
Attempt to read from field 'int android.view.View.mPrivateFlags' on a null objec-CSDN论坛
Attempt to read from field 'int android.view.View.mPrivateFlags' - 简书