Потоки веб-представления никогда не останавливаются (WebViewCoreThread, CookieSyncManager, http [0-3])

Я использую веб-представление для отображения некоторого интернет-контента на одной из Операций нашего приложения.
Проблема состоит в том, что, когда пользователь переключается из этого действия, потоки 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 в каждом из тех потоков для выхода.

Я пытался звонить webView.destroy() в действии onPause() метод, но это не имело никакого влияния.
Когда я отключаю призыв к открытию веб-страницы в webView ( webView.loadUrl(...) ), те потоки естественно не запускаются и поэтому не остаются после отъезда действия.

Любые идеи относительно того, как я могу сделать WebViewостановка потоков после отъезда их действия?

34
задан Idolon 10 July 2011 в 15:58
поделиться

1 ответ

Вы должны иметь возможность останавливать / возобновлять эти потоки, вызывая 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

40
ответ дан 27 November 2019 в 16:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: