Mul*_*yan 3 java android android-webview
我正在开发一个应用程序,我在webview中从外部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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法提高性能?
不幸的是,你没有太多办法解决这个问题.然而:
你可以尝试一些事情,还有一些事情需要检查.特别:
您正在设置View.GONE页面加载时的可见性(使您的webview不可见),然后在页面加载时再次显示它.这可能是个问题.
试试没有这个,你可能会发现它会更快.根据我的经验,onPageFinished(..)只在页面加载后触发一段时间.
页面真的需要JavaScript吗?如果没有,请不要启用它.
如果它在您的情况下是可以使用的,您可以使用像Jsoup这样的HTML解析器从页面中仅提取所需的数据,并将其显示给用户.这会快得多.
如果页面使用Ajax动态加载数据,您还可以直接从其使用的端点加载数据.在桌面浏览器中打开页面,打开开发人员工具的网络选项卡,以了解页面的工作方式和加载数据.
您可以阻止来自WebView的请求shouldInterceptRequest(..).如果页面具有例如的内容,这可能会有所帮助.Facebook共享按钮或您不需要的额外图像.阻止这些将加快加载时间.
如果您向我们展示您正在使用的网址,也许我可以进一步调查并告诉您如何在您的情况下加快速度.如果有帮助,请告诉我.
| 归档时间: |
|
| 查看次数: |
8828 次 |
| 最近记录: |