2016-01-13 127 views
0

我使用的WebView注入页面上的一些JS代码。这个webview有一个“多米诺骨牌效应”,如:AsyncTask doInBackground方法中的WebView?

webView.setWebViewClient(new WebViewClient{ 
    ... 
@Override 
public void onPageFinished(WebView view, String url) { 
    if(url.contains("http://A")){ 
     view.loadUrl("javascript: window.location.assign('http://B');") 
    } else if(url.contains("http://B"){ 
     //do another stuff 
    } 
    ... 
}); 

大约需要10〜15秒。我目前直接在Activity上做这个,但是我不满意它的性能。此外,如果用户在此过程中最小化应用程序,它将停止工作。

现在我试图doInBackground(),但我不能没有实例化的WebView在非UI线程或拨打使用loadURL()对接收的WebView(从的AsyncTask <>参数)。我能做什么 ?

我应该使用IntentService完成所有这些工作吗?

编辑:我正在注入JS来返回一个ArrayList。我只使用webview来解析网页,并得到我想要的。

谢谢!

+0

视图组件应该仅在UI线程上绘制 –

+0

您是否说您对创建客户端并将其传递给WebView后WebView打开的速度感到不满意? –

+0

不..我没有清楚..我正在注入JS来返回一个ArrayList。我使用webview只解析网页,并得到我想要的^^ –

回答

0

您无法从后台线程更新您的用户界面。 使用

runOnUiThread(new Runnable() { 
       public void run() { 

       // Update your UI 

      } 
     }); 

如果需要延迟,使用ProgressDialog和提醒页面正在加载的用户。

+0

如何发送变量从doInBackground到webview从runOnUithread里面?我试过但没有工作! mWebView.loadUrl(“javascript:MyFunction(”+ sb.toString()+“)”); – user1788736

相关问题