先看一眼关键的闪退信息:
Caused by: java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'org.chromium.base.ObserverList org.chromium.base.ApplicationStatus$ActivityInfo.getListeners()' on a null object reference
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.chromium.base.ObserverList org.chromium.base.ApplicationStatus$ActivityInfo.getListeners()' on a null object reference
我是怎么遇到的:
两个Activity,结构如下:
- FirstActivity -> Fragment -> XWalkView (记为A)
- SecondActivity -> XWalkView (记为B)
先打开A,再打开B,没有问题;先打开B,再打开A,必然闪退
XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true)
一开始以为是嵌入到Fragment里的问题,有人说可以这么干,结果是无效的
然后以为是id
重复可能导致问题,修改为不同的id
,问题依旧
接着以为是inflater
的问题,改用代码创建,依然无效
最终正解:
MainActivity
里面加一行 mXWalkView = XWalkView(this)
为什么?
其实我也不知道,感觉上是XWalkView
内部注册了Listener
而没有注销之类的问题
之后整理一个Demo提交到XWalkView的issue里吧