簡體   English   中英

android webview loadurl慢

[英]android webview loadurl slow

我正在開發一個應用程序,我在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);
        }
    }



}

有什么想法提高性能?

不幸的是,你沒有太多辦法解決這個問題。 然而:

  • 嘗試在Android設備的瀏覽器中加載您的URL。 它更快嗎? 如果沒有,你可以做的並不多。

你可以嘗試一些事情,還有一些事情需要檢查。 特別:

  • 您正在加載頁面時將可見性設置為View.GONE (使您的webview不可見),然后在頁面加載時再次顯示它。 這可能是個問題

    試試沒有這個,你可能會發現它會更快。 根據我的經驗, onPageFinished(..)僅在頁面加載后觸發一段時間。

  • 頁面真的需要JavaScript嗎? 如果沒有,請不要啟用它。

  • 如果它在您的情況下是可以使用的,您可以使用像Jsoup這樣的HTML解析器從頁面中僅提取所需的數據,並將其顯示給用戶。 這會快得多。

    如果頁面使用Ajax動態加載數據,您還可以直接從其使用的端點加載數據。 在桌面瀏覽器中打開頁面,打開開發人員工具的網絡選項卡,以了解頁面的工作方式和加載數據。

  • 您可以使用shouldInterceptRequest(..)阻止來自WebView的請求。 如果頁面具有例如的內容,這可能會有所幫助。 Facebook共享按鈕或您不需要的額外圖像。 阻止這些將加快加載時間。

如果您向我們展示您正在使用的網址,也許我可以進一步調查並告訴您如何在您的情況下加快速度。 如果有幫助,請告訴我。

我認為取決於需要下載的數據量。 還要記住,當您處於調試模式時,應用程序要慢得多,因為它必須跟蹤所有信息。

也許這個鏈接可以幫助您提高性能:

在webview中加載URL如果你把所有靜態資源(如CSS,JS字體等)放在你的Android應用程序的本地資產中,並在頁面中為你的資源提供相對URL,那么它的加載速度會快得多。

這是因為現在您的webview正在加載來自您或第三方服務器的所有資源,無論它們存在於哪里,但如果它們位於assets文件夾中,那么您可以在本地加載它們。

因此,您的所有數據和HTML都將來自您的服務器,靜態內容將在本地存儲和加載。

您已使用loadUrl的webview的loadDataWithBaseURL方法

這是一篇詳細的文章,可以提供幫助http://www.codewithasp.net/2016/06/speedup-android-webview-app-localise-static-resources.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM