Android AsyncTask在WebView中加载本地文件
在主持人将此问题标记为重复问题之前,我已经阅读了堆栈中的所有相关问题,没有任何关于此问题的报告 我在尝试将AsyncTask与WebView一起使用时遇到问题,请按照代码进行操作Android AsyncTask在WebView中加载本地文件,android,android-studio,android-asynctask,android-webview,Android,Android Studio,Android Asynctask,Android Webview,在主持人将此问题标记为重复问题之前,我已经阅读了堆栈中的所有相关问题,没有任何关于此问题的报告 我在尝试将AsyncTask与WebView一起使用时遇到问题,请按照代码进行操作 final WebView webNISR=(WebView)findViewById(R.id.web\u NISR); 最终WebSettings webS_NISR=webNISR.getSettings(); AsyncTask任务=新建AsyncTask(){ @凌驾 受保护的void onPreExecu
final WebView webNISR=(WebView)findViewById(R.id.web\u NISR);
最终WebSettings webS_NISR=webNISR.getSettings();
AsyncTask任务=新建AsyncTask(){
@凌驾
受保护的void onPreExecute(){
webNISR.setVisibility(View.GONE);
//我把webNISR.loadUrl留在这里进行测试,但它的处理速度一直很慢,没有任何变化!
loadUrl(getString(R.string.waytofile)+“file.html”);
}
@凌驾
受保护的Void doInBackground(Void…参数){
webS_NISR.setJavaScriptEnabled(true);
webS\u NISR.setDomStorageEnabled(true);
//webNISR.loadUrl(参数);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
webNISR.setVisibility(View.VISIBLE);
}
};
在doInBackground()
中,只需进行处理,好吗
但是我不能在内部使用webNISR.loadUrl()
,我总是会得到错误“方法loadUrl必须从UI或UI线程调用,当前推断的线程是worker”,但是如果我使用异步任务在另一个线程上完成此过程,并且不加载UIThread(这会使应用程序变慢)
我知道任何改变视图的内容都必须是onPostExecute()
或onPreExecute()
,但不是webNISR.loadUrl()
减慢了活动的加载速度吗
我需要“包含”WebView呈现,这样我就可以获得性能增益或只是设法加载页面
值得一提的是,每个活动大约有7个WebView,因此需要加载页面
注意:网络视图是不可替代的(只有它们才能加载这些本地文件)
我再也不知道该怎么办了,这场战斗已经持续了好几天:/
欢迎提出任何问题
谢谢大家! webView.loadUrl()是异步的:它立即返回,webView在自己的线程中继续工作。因此,您不需要异步任务
。我怀疑保持AsyncTask
是否会增加任何显著的性能增益
您可以使用setWebViewClient
将WebViewClient
设置为WebView
并覆盖onPageFinished
方法。
当webview在onPageFinished
回调中完成加载时,执行您需要执行的操作
final WebView webNISR = (WebView) findViewById(R.id.web_NISR);
webNISR.setVisibility(View.GONE);
webNISR.getSettings().setJavaScriptEnabled(true);
webNISR.getSettings().setDomStorageEnabled(true);
webNISR.loadUrl(getString(R.string.waytofile)+"file.html");
webview.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
webNISR.setVisibility(View.VISIBLE);
}
});
我已经尝试过这种方法,无论是否使用相同的方法,页面都会保持不稳定。同样,我尝试创建一个控制器,使所有人在加载时都可见,但由于某些原因,无法访问onPageFinished()
方法中包含的变量的值。如果你愿意,我会编辑这个问题并添加我已经用这个方法尝试过的内容。
final WebView webNISR = (WebView) findViewById(R.id.web_NISR);
webNISR.setVisibility(View.GONE);
webNISR.getSettings().setJavaScriptEnabled(true);
webNISR.getSettings().setDomStorageEnabled(true);
webNISR.loadUrl(getString(R.string.waytofile)+"file.html");
webview.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
webNISR.setVisibility(View.VISIBLE);
}
});