我正在开发一个应用程序,我正在从 web View 中的外部 url 加载网页。 加载页面需要很长时间才能加载,需要 30 秒到 1 分钟 所以请看这里我的代码
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
public class WebActivity extends AppCompatActivity {
private WebView webView;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
webView = (WebView)findViewById(R.id.webView);
progressBar= (ProgressBar)findViewById(R.id.progressBar2);
String link = getIntent().getExtras().getString("webLink");
String title = getIntent().getExtras().getString("webTitle");
setTitle(title);
webView.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
Log.d("WEB", link);
webView.setWebViewClient(new MyBrowser());
webView.getSettings().setJavaScriptEnabled(true);
//webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
//webView.getSettings().setDomStorageEnabled(true);
//webView.getSettings().setAppCachePath(String.valueOf(getCacheDir()));
//webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.loadUrl(link);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; goto parent activity.
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
}
有什么提高性能的想法吗?
最佳答案
不幸的是,您无法解决这个问题。然而:
- 尝试在 Android 设备的浏览器中加载您的 URL。它更快吗?否则,您真的无能为力。
不过,您可以尝试一些事情,还有一些事情需要检查。具体来说:
您在页面加载时将可见性设置为
View.GONE
(使您的 webview 不可见),然后在页面加载后使其再次可见。 这可能是问题所在。尝试不使用它,您可能会发现它会更快。根据我的经验,
onPageFinished(..)
只会在页面加载后的一段时间内触发。页面真的需要 JavaScript 吗?如果没有,请不要启用它。
如果您的情况可行,您可以使用像 Jsoup 这样的 HTML 解析器。从页面中仅提取所需的数据,并将其显示给用户。这样会快很多。
如果页面使用 Ajax 动态加载数据,您也可以直接从它使用的端点加载数据。在桌面浏览器中打开页面,打开开发者工具的网络选项卡,了解页面的工作方式和加载数据。
您可以使用
shouldInterceptRequest(..)
阻止来自 WebView 的请求。如果页面有类似的东西,这可能会有所帮助。 Facebook 共享您不需要的按钮或额外图像。阻止这些将加快加载时间。
如果您向我们展示您正在使用的 URL,也许我可以进行更多调查并准确地告诉您如何在您的案例中加快速度。让我知道是否有帮助。
关于java - android webview loadurl 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35411886/