2016-02-15 3 views
2

Я работаю над приложением, где я загружаю веб-страницу с внешнего URL-адреса в веб-просмотре. Загрузка страницы занимает так много времени, чтобы быть загружен это занимает от 30 секунд до 1 минуты поэтому, пожалуйста, смотрите здесь, на мой кодandroid webview loadurl slow

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); 
     } 
    } 



} 

любая идея для повышения производительности?

ответ

4

Unofortunately, там не будет много вы можете сделать, чтобы исправить это. Однако:

  • Попробуйте загрузить свой URL-адрес в браузере на устройстве Android. Это быстрее? Если нет, вы не можете многое сделать.

Есть несколько вещей, которые вы можете попробовать, и несколько вещей, чтобы проверить. В частности:

  • Вы установка видимости View.GONE (что делает ваш WebView невидимым), пока страница загружается, а затем сделать его видимым, когда страница загружена. Возможно, это проблема.

    Попробуйте без этого, и вы, вероятно, обнаружите, что это будет быстрее. По моему опыту, onPageFinished(..) запускается только через некоторое время после загрузки страницы.

  • На страницу действительно нужен JavaScript? Если нет, не включайте его.

  • Если это возможно в вашем случае, вы можете использовать HTML-парсер, например Jsoup, чтобы извлечь только нужные данные со страницы и показать это пользователю. Это будет намного быстрее.

    Если на странице используется Ajax для динамической загрузки данных, вы также можете загружать данные непосредственно с конечных точек, которые она использует. Откройте страницу в обозревателе рабочего стола и откройте вкладку сети инструментов разработчика, чтобы узнать, как работает страница и загружает данные.

  • Вы можете заблокировать запросы от WebView с помощью shouldInterceptRequest(..). Это может помочь, если на странице есть такие вещи, как например. Facebook совместно использовать кнопки или дополнительные изображения, которые вам не нужны. Блокировка будет ускорять время загрузки.

Если вы показать нам URL, который вы используете, может быть, я могу исследовать больше и сказать вам axactly, как вы могли бы ускорить его в вашем случае. Дайте мне знать, если это поможет.

+0

пытаясь применить его, и я дам вам ответ –

+0

Спасибо, что он решил проблему, с которой он отправлялся из webView.setVisibility (View.GONE); : D –

+0

@MulhamAryan, Glad помогло :-) – JonasCz

1

Я думаю, что зависит от объема данных, которые необходимо загрузить. Также имейте в виду, что, находясь в режиме отладки, приложение работает намного медленнее, поскольку оно должно отслеживать всю информацию.

Возможно это ссылки могут помочь вам улучшить производительность:

+0

я уже тестировал после установки приложения из Google Play и все пользователи имеют те же проблемы они говорят, что очень медленно, когда они хотят открыть URL-адрес. –

+0

Конечный пользователь не является хорошим тестером, если сеть тяжелая, а в сетях это плохо. Вы не можете ничего сделать для повышения производительности. Вам нужен тест с хорошей связью и сделайте собственные выводы. Извините за невозможность помочь больше – encastellano

+0

Может быть, если вы не подождете, чтобы закончить загрузку, чтобы показать ваш веб-просмотр, пользовательский опыт будет лучше – encastellano

1

При загрузке URL-адресов в ваш веб-просмотр, если вы поместите все ваши статические ресурсы, такие как CSS, шрифты JS и т. Д. В свой локальный ресурс приложения Android, и укажите относительный URL-адрес вашего ресурса на странице, тогда он будет загружаться намного быстрее.

Это потому, что прямо сейчас ваш веб-просмотр загружает весь ресурс с вашего сервера или стороннего сервера, где бы он ни существовал, но если они находятся в папке с ресурсами, вы можете их загрузить локально.

Так что все ваши данные и HTML будут поступать с вашего сервера, а статический контент будет храниться и загружаться локально.

Вы использовать метод loadDataWithBaseURL из WebView insteed из loadUrl

Вот подробная статья, которая может быть полезной http://www.codewithasp.net/2016/06/speedup-android-webview-app-localise-static-resources.html