簡體   English   中英

無法創建線程中的WebView

[英]A WebView in a thread can't be created

我有一些線程,我在其中創建一些視圖並准備它們顯示。 其中我也有一個WebView。 此代碼在線程中執行:

WebView lGraphWebView = null;
        try{
            lGraphWebView = new WebView(AppController.getAppController());
        }catch (Exception e) {
            Log.d("info", "error: " +e );
        }

並拋出以下異常:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

這有點奇怪,因為當我創建一個簡單的按鈕時,一切都還可以。 所以,任何人都可以解釋為什么在創建WebView時我會得到這個異常,如果Looper.prepare()可以幫到這里嗎? 提前致謝!

通常,在主線程之外創建視圖是不安全的。

在您的特定情況下,這是不允許的,因為WebView在其構造函數中創建Handler()以與UI線程進行通信。 但是由於Handler的默認構造函數將其自身附加到當前線程,並且當前線程沒有運行Looper ,因此您將獲得此異常。

您可能認為創建一個looper線程(必須至少與WebView一樣長)可能會對您有所幫助,但這實際上是一種冒險的方法。 我不推薦它。

你應該堅持在主線程中創建WebView 所有控件通常都針對快速構造進行了優化,因為它們幾乎總是在UI線程中創建。

您不應該在主UI線程以外的線程中創建或操作視圖。 例如,您可以使用Handler發布到UI線程:

private Handler handler = new Handler();

handler.post(new Runnable() {
   public void run() {
       lGraphWebView = new WebView(AppController.getAppController());
   }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM