WebView 线程永不停止(WebViewCoreThread、CookieSyncManager、http[0-3]) [英] WebView threads never stop (WebViewCoreThread, CookieSyncManager, http[0-3])
问题描述
我使用 WebView 在我们的应用程序之一上显示一些互联网内容活动.
问题是当用户退出这个活动时,WebView 的线程继续运行!
有问题的线程是:
I use a WebView to display some internet content on one of our app's
Activities.
The problem is that when the user switches out of this activity,
WebView's threads keep running!
The problematic threads are:
Thread [<17> WebViewCoreThread] (Running)
Thread [<25> CookieSyncManager] (Running)
Thread [<19> http0] (Running)
Thread [<29> http1] (Running)
Thread [<31> http2] (Running)
Thread [<33> http3] (Running)
暂停这些线程中的每一个,并检查它正在忙于做什么:
Pausing each one of these threads, and checking what it is busy doing:
Thread [<17> WebViewCoreThread] (Suspended)
Object.wait(long, int) line: not available [native method]
MessageQueue(Object).wait() line: 288
MessageQueue.next() line: 148
Looper.loop() line: 110
WebViewCore$WebCoreThread.run() line: 471
Thread.run() line: 1060
Thread [<25> CookieSyncManager] (Suspended)
Object.wait(long, int) line: not available [native method]
MessageQueue(Object).wait(long) line: 326
MessageQueue.next() line: 144
Looper.loop() line: 110
CookieSyncManager(WebSyncManager).run() line: 90
Thread.run() line: 1060
Thread [<19> http0] (Suspended)
Object.wait(long, int) line: not available [native method]
RequestQueue(Object).wait() line: 288
ConnectionThread.run() line: 93
我想知道如何告诉每个线程中的 Looper
退出.
I wonder how can I tell the Looper
in each of those threads to quit.
我尝试在活动的 onPause()
方法中调用 webView.destroy()
,但它没有影响.
当我禁用在 webView 中打开网页的调用时( webView.loadUrl(...)
),那些线程自然不会启动,并且因此,离开活动后不要留下来.
I tried calling webView.destroy()
in the activity's onPause()
method,
but it had no influence.
When I disable the call for opening a web page in the webView
( webView.loadUrl(...)
), those threads naturally are not started, and
therefore don't stay on after leaving the activity.
关于如何让 WebView
的线程在离开后停止的任何想法他们的活动?
Any ideas as to how I can make WebView
's threads stop after leaving
their activity?
推荐答案
您应该能够通过调用 webview 上的 onPause/onResume 来停止/恢复这些线程.
You should be able to stop / resume these threads by calling the onPause / onResume on the webview.
然而这些都是隐藏的,所以你需要通过反射来完成.以下代码对我有用:
Those are however hidden, so you will need to do it through reflection. The following code worked for me:
Class.forName("android.webkit.WebView").getMethod("onPause", (Class[]) null).invoke(webView, (Object[]) null);
其中 webView 是 WebView 的实例.
Where webView is the instance of WebView.
另见:http://code.google.com/p/android/issues/detail?id=10282
这篇关于WebView 线程永不停止(WebViewCoreThread、CookieSyncManager、http[0-3])的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!