2011-08-21 71 views
0

我有這個代碼的一些問題,在這裏你可以找到一個簡化版本的問題。工作原理Post方法在View上?

public class MyActivity extends Activity { 

private WebView wv = null; 
private CountDownLatch signal = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    wv = (WebView) findViewById(R.id.web); 
    wv.setWebViewClient(new WebViewClient(){ 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      signal.countDown(); 
      super.onPageFinished(view, url); 
     } 
    } 
    wv.post(new Runnable() { 

     @Override 
     public void run() { 
      wv.loadUrl("file:///android_asset/MySample.html"); 
     } 
    }); 

    try { 
     signal.await(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    ElaborateAll(2); 
} 

}

在調試代碼沒有達到ElaborateAll(2)。

每一個幫助將得到明確。

回答

0

你在做什麼有:

  1. 添加自定義WebViewClient用的CountDownLatch
  2. 發佈一個Runnable到UI線程
  3. 阻塞UI線程

而這它,你的執行停在那裏,Runnable不會被執行,因此你永遠不會loadUrl();刪除CountDownLatch並且程序將按照預期loadUrl()。

+0

謝謝,我正在將代碼移入AsyncTask – Neo1975