android webview loadurl慢

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)

有什么想法提高性能?

Jon*_*ica 6

不幸的是,你没有太多办法解决这个问题.然而:

  • 尝试在Android设备的浏览器中加载您的URL.它更快吗?如果没有,你可以做的并不多.

你可以尝试一些事情,还有一些事情需要检查.特别:

  • 您正在设置View.GONE页面加载时的可见性(使您的webview不可见),然后在页面加载时再次显示它.这可能是个问题.

    试试没有这个,你可能会发现它会更快.根据我的经验,onPageFinished(..)只在页面加载后触发一段时间.

  • 页面真的需要JavaScript吗?如果没有,请不要启用它.

  • 如果它在您的情况下是可以使用的,您可以使用像Jsoup这样的HTML解析器从页面中仅提取所需的数据,并将其显示给用户.这会快得多.

    如果页面使用Ajax动态加载数据,您还可以直接从其使用的端点加载数据.在桌面浏览器中打开页面,打开开发人员工具的网络选项卡,以了解页面的工作方式和加载数据.

  • 您可以阻止来自WebView的请求shouldInterceptRequest(..).如果页面具有例如的内容,这可能会有所帮助.Facebook共享按钮或您不需要的额外图像.阻止这些将加快加载时间.

如果您向我们展示您正在使用的网址,也许我可以进一步调查并告诉您如何在您的情况下加快速度.如果有帮助,请告诉我.