不幸的是,我无法可靠地重现此错误,但很少得到此错误,偶尔也会在实时崩溃日志中报告该错误.这是用户使用DroID 2.2.2 FRG83G报告的堆栈跟踪
junit.framework.AssertionFailedErrorat junit.framework.Assert.fail(Assert.java:47)at junit.framework.Assert.assertTrue(Assert.java:20)at junit.framework.Assert.assertNull(Assert.java:233)at junit.framework.Assert.assertNull(Assert.java:226)at androID.webkit.WebVIEwCore$WebCoreThread.run(WebVIEwCore.java:594)at java.lang.Thread.run(Thread.java:1096)
这似乎是由于WebVIEwCore.java中的这一行
Assert.assertNull(sWebCoreHandler);
某种程度上,尚未初始化androID.os.Handler的私有静态实例sWebCoreHandler(感谢@IDolon进行更正),但是我不知道如何解决或防止此问题.
这种情况经常发生,足以让我担心.当应用程序正在加载甚至没有WebVIEw的Activity时,似乎也发生了有趣的事情,尽管其中一项活动确实具有WebVIEw.
附言这被记录为错误#16258
解决方法:
看着罪魁祸首的源代码…
public WebVIEwCore(Context context, WebVIEw w, CallbackProxy proxy, Map<String, Object> JavaScriptInterfaces) { //.... // We need to wait for the initial thread creation before sending // a message to the WebCore thread. // XXX: This is the only time the UI thread will wait for the WebCore // thread! synchronized (WebVIEwCore.class) { if (sWebCoreHandler == null) { // Create a global thread and start it. Thread t = new Thread(new WebCoreThread()); //... } }//...private static Handler sWebCoreHandler;// Class for provIDing Handler creation insIDe the WebCore thread.private static class WebCoreThread implements Runnable { public voID run() { Looper.prepare(); Assert.assertNull(sWebCoreHandler); // this assertion fails synchronized (WebVIEwCore.class) { sWebCoreHandler = new Handler() { //...
这在任何WebVIEw的构造函数中执行,并且断言错误来自WebCoreThread构造函数,仅当sWebCoreHandler为null时才调用该断言,因此,从理论上讲,该断言永远不会失败.除非它在synced子句之外运行,并且在一个新的Thread中运行,而该新线程在Synchronized子句中创建并启动,据说只能运行一次.
看来您的错误与并发创建WebvIEw有关.如果您的应用程序只有一个活动和一个WebvIEw,请确保该活动的调用次数不超过必要次数(一次调用一次),并确保WebVIEw是在onCreate方法而不是活动构造函数中创建的,而startActivity是在主线程中调用,您应该会很好.
总结以上是内存溢出为你收集整理的Android错误:WebViewCore失败并出现断言错误全部内容,希望文章能够帮你解决Android错误:WebViewCore失败并出现断言错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)