我使用WebView在我们的应用程序之一上显示一些Internet内容
Activity 。
问题是,当用户退出该 Activity 时,
WebView的线程继续运行!
有问题的线程是:

Thread [<17> WebViewCoreThread] (Running)
Thread [<25> CookieSyncManager] (Running)
Thread [<19> http0] (Running)
Thread [<29> http1] (Running)
Thread [<31> http2] (Running)
Thread [<33> http3] (Running)

暂停以下每个线程,并检查其正在做什么:
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退出。

我尝试在 Activity 的webView.destroy()方法中调用onPause()
但它没有任何影响。
当我禁用在webView中打开网页的调用时
(webView.loadUrl(...)),这些线程自然不会启动,并且
因此,离开 Activity 后不要继续。

关于如何使WebView的线程退出的任何想法在离开后都会停止
他们的 Activity ?

最佳答案

您应该能够通过在Web View 上调用onPause/onResume来停止/恢复这些线程。

但是,这些都是隐藏的,因此您需要通过反射来实现。以下代码为我工作:

Class.forName("android.webkit.WebView").getMethod("onPause", (Class[]) null).invoke(webView, (Object[]) null);

其中webView是WebView的实例。

另请参阅:http://code.google.com/p/android/issues/detail?id=10282

10-07 19:19
查看更多