如何在新线程中运行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)
答案 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");
}
});
}
...
}