如何在新线程中创建和运行WebView?

时间:2019-01-17 06:31:53

标签: android webview

如何在新线程中运行WebView。

public class MainActivity extends AppCompatActivity {
class demo implements Runnable{
    @Override
    public void run() {
       try{  
           WebView mywebview = new WebView(MainActivity.this);
           mywebview.loadUrl("https://www.google.com");
       }catch (Exception e){

           e.printStackTrace();
       }
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    demo obj = new demo();
    Thread t = new Thread(obj);
    t.start();
}

}

显示给我例外。

  

W / System.err:java.lang.NullPointerException:尝试从中读取   字段“ android.os.MessageQueue android.os.Looper.mQueue”为空   对象参考           在android.os.Handler。(Handler.java:229)           在android.os.Handler。(Handler.java:137)           在com.android.webview.chromium.WebViewChromiumFactoryProvider.ensureChromiumStartedLocked(WebViewChromiumFactoryProvider.java:9042)

1 个答案:

答案 0 :(得分:0)

您为什么要这么做?在mainThread上创建WebView并加载URL 很好。如果要更新视图,则必须在mainThread上进行。

如果您使用的是简单线程,然后使用Handler或message或runOnUiThread,则可以更新主线程的视图。

public class MainActivity extends Activity {
  private Handler uiHandler;
  private WebView webView;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main);

    uiHandler = new Handler();
    webView = findViewById(R.id.web_view);
  }

  // This method is to be executed on the new thread.
  public void simulate() {
    uiHandler.post(new Runnable() {
      @Override
      public void run() {
        // This is run on the UI thread.
        webView.loadUrl("https://www.google.com");
      }
    });
  }
  ...
}