【问题标题】:android webview loadurl slowandroid webview loadurl慢
【发布时间】:2016-02-15 14:26:10
【问题描述】:

我正在开发一个应用程序,我正在从 web 视图中的外部 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);
        }
    }



}

有什么提高性能的想法吗?

【问题讨论】:

    标签: java android android-webview


    【解决方案1】:

    很遗憾,您无法解决这个问题。然而:

    • 尝试在您的 Android 设备上的浏览器中加载您的 URL。它更快吗?如果没有,你真的无能为力。

    不过,您可以尝试一些事情,还有一些事情需要检查。具体来说:

    • 您在页面加载时将可见性设置为View.GONE(使您的网络视图不可见),然后在页面加载后再次使其可见。 这可能是问题

      尝试不使用它,您可能会发现它会更快。根据我的经验,onPageFinished(..) 只会在页面加载后的一段时间内触发。

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

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

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

    • 您可以使用 shouldInterceptRequest(..) 阻止来自 WebView 的请求。如果页面有类似的东西,这可能会有所帮助。 Facebook 分享按钮或您不需要的额外图片。阻止这些将加快加载时间。

    如果您向我们展示您正在使用的 URL,也许我可以进行更多调查并准确地告诉您如何在您的情况下加快速度。如果有帮助,请告诉我。

    【讨论】:

    • 尝试申请,我会给你答案
    • 谢谢它解决了它来自 webView.setVisibility(View.GONE); 的问题:D
    • @MulhamAryan,很高兴它有帮助:-)
    • onfinishloading 在加载所有页面脚本 css 等时触发,但您可以在它们完成加载之前使用您的网络,这不是技术问题,而是用户体验问题。我很高兴你能解决它
    【解决方案2】:

    我认为取决于需要下载的数据量。另请记住,当您处于调试模式时,应用程序要慢得多,因为它必须跟踪所有信息。

    也许这个链接可以帮助你提高性能:

    【讨论】:

    • 我在从 Google Play 安装应用程序后已经对其进行了测试,并且所有用户都遇到了同样的问题,他们说当他们想要打开一个 url 时速度很慢
    • 最终用户不是一个好的测试者,如果网络很重,网络很差,你就无法提高性能。您需要通过良好的连接进行测试并得出自己的结论。很抱歉无法提供更多帮助
    • 如果你不等待完成加载来显示你的 webview,用户体验会更好
    • 首先感谢您的评论,每条评论都会有所作为,但关于连接,它始终是相同的结果,我在 4 种连接类型上测试过它,首先是 256KB 速度,最好的连接是 4MB 速度,但是所有的连接都给出相同的结果,我不知道为什么!
    【解决方案3】:

    在您的网页视图中加载 URL 时,如果您将所有静态资源(如 CSS、JS 字体等)放在您的 android 应用程序的本地资产过滤器中,并在页面中为您的资源提供相对 URL,那么它将加载得更快。

    这是因为现在您的 webview 正在从您或第三方服务器加载所有资源,但如果它们位于 assets 文件夹中,那么您可以在本地加载它们。

    因此,您的所有数据和 HTML 都将来自您的服务器,静态内容将在本地存储和加载。

    您已经使用 webview 的 loadDataWithBaseURL 方法而不是 loadUrl

    这是一篇详细的文章,可能会有所帮助 http://www.codewithasp.net/2016/06/speedup-android-webview-app-localise-static-resources.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      相关资源
      最近更新 更多