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.Handler的空对象引用上的字段'android.os.MessageQueue android.os.Looper.mQueue'读取。(Handler.java:229)在 android.os.Handler.(Handler.java:137) 在 com.android.webview.chromium.WebViewChromiumFactoryProvider.ensureChromiumStartedLocked(WebViewChromiumFactoryProvider.java:9042)
解决方案
你为什么要那样做?在 mainThread 上创建WebView
和加载 url就可以了。如果要更新视图,必须在 mainThread 上进行。
如果您使用的是简单线程,则使用Handler
或消息,或者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");
}
});
}
...
}
推荐阅读
- python - 带有自定义颜色数组的 plot_trisurface
- laravel - 在另一个函数中重用变量
- flutter - 考虑到firebase用户是否在线处理firebase通知
- css - 在 Vue 项目中包含 CSS 文件
- html - 如何查看下拉栏中列出的菜单
- python - win 10 Qt C++程序调用Python程序如何打包分发
- selenium - 如何定位角根元素?
- nginx - React app - nginx 服务器上所有具有动态 URL 的页面的空白页面
- amazon-web-services - 我可以创建同一个 ec2 图像的多个实例吗
- android - 在 RecyclerView 中的 ViewPager 片段中获取“java.lang.IllegalArgumentException: No view found for id”