2016-01-13 132 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

相關問題