[英]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);
}
}
}
有什么想法提高性能?
不幸的是,你沒有太多辦法解決這個問題。 然而:
你可以嘗試一些事情,還有一些事情需要檢查。 特別:
您正在加載頁面時將可見性設置為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.