2015-09-08 2 views
3

У меня возникла проблема с загрузкой URL-адреса в android ниже 5.0 (lollipop) Слишком медленно загружать данные, но в android 5.0 или выше его рабочий хорошо. как решить эту проблему? I have follow this link. & How to improve webview load timeAndroid-браузер медленный в ниже 5.0 (леденец), но в 5.0 он работает отлично

мой код

@SuppressLint({ "SetJavaScriptEnabled", "DefaultLocale" }) 
     public class YS_WebViewActivity extends Activity 
    { 
    private Button btnDone; 
    private WebView webViewLoadUrl; 
    private YS_GeneralUtility generalUtility; 
    private Dialog alertDialogBox; 
    private String url = ""; 
    private TextView tvLoading; 
    private Button btnCancel; 
    private Button btnRetry; 

    @SuppressLint("InlinedApi") 
    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_webview); 
     btnDone = (Button) findViewById(R.id.btnDone); 
     webViewLoadUrl = (WebView) findViewById(R.id.webViewLoadUrl); 
     //webViewLoadUrl.setBackgroundColor(Color.parseColor("#123456")); 
     tvLoading = (TextView) findViewById(R.id.tvLoading); 
     url = getIntent().getExtras().getString("url"); 
     webViewLoadUrl.setVisibility(View.INVISIBLE); 
     generalUtility = new YS_GeneralUtility(this); 

     webViewLoadUrl.getSettings().setJavaScriptEnabled(true); // enable javascript 
     try { 
      webViewLoadUrl.getSettings().setRenderPriority(RenderPriority.HIGH); 
      webViewLoadUrl.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
      webViewLoadUrl.getSettings().setDomStorageEnabled(true); 
      webViewLoadUrl.getSettings().setAllowFileAccess(true); 
      webViewLoadUrl.getSettings().setAllowContentAccess(true); 
      webViewLoadUrl.getSettings().setAllowFileAccessFromFileURLs(true); 
      //webViewLoadUrl.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     tvLoading.setTypeface(generalUtility.faceAvenirLight); 
     btnDone.setTypeface(generalUtility.faceAvenirMedium); 
     btnDone.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       myErrorFinish(); 
      } 
     }); 
     webViewLoadUrl.setWebViewClient(new WebViewClient() 
     { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) 
      { 
       //Log.i(TAG, "Processing webview url click..."); 
       view.loadUrl(url); 
       return true; 
      } 

      public void onPageFinished(WebView view, String url) 
      { 
       //Log.i(TAG, "Finished loading URL: " + url); 
       webViewLoadUrl.setVisibility(View.VISIBLE); 
       tvLoading.setVisibility(View.INVISIBLE); 
      } 

      String errorData = "<html><head></head>" 
        + "<body style=' font-family:Avenir !important;font-weight:lighter !important; color:#ffffff; margin : 0px auto;'>" 
        + "<div style = 'width : 100% ; height : 100% ; background:#123456;'> </div>" 
        + "</body></html>"; 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
      { 
      // Log.e(TAG, failingUrl + "Error: " + description); 
       view.loadData(errorData, "text/html", "UTF-8"); 
       alertDialogOnInternetOff(getString(R.string.errorMsgInternet)); 
       // finish(); 
      } 
      @Override 
      public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
       super.onReceivedSslError(view, handler, error); 
       handler.proceed(); 
      } 
     }); 

     webViewLoadUrl.loadUrl(url); 
     // setContentView(webview); 
    } 


    private void alertDialogOnInternetOff(String message) 
    { 
     alertDialogBox = new Dialog(YS_WebViewActivity.this, R.style.InternetErrorPopup); 
     alertDialogBox.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     alertDialogBox.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
     alertDialogBox.setContentView(R.layout.internetpopup_dialog); 
     alertDialogBox.setCancelable(false); 
     alertDialogBox.show(); 
     btnCancel = (Button) alertDialogBox.findViewById(R.id.btnCancel); 
     btnRetry = (Button) alertDialogBox.findViewById(R.id.btnRetry); 
     TextView txtExitMessage = (TextView) alertDialogBox.findViewById(R.id.textViewMessage); 
     TextView horizontalLinePopup = (TextView) alertDialogBox.findViewById(R.id.horizontalLinePopup); 
     TextView verticalLinePopup = (TextView) alertDialogBox.findViewById(R.id.verticalLinePopup); 
     horizontalLinePopup.setBackgroundColor(getResources().getColor(R.color.internetpopupBorderinnerpageColor)); 
     verticalLinePopup.setBackgroundColor(getResources().getColor(R.color.internetpopupBorderinnerpageColor)); 
     txtExitMessage.setTypeface(generalUtility.faceAvenirLight); 
     btnCancel.setTypeface(generalUtility.faceAvenirLight); 
     btnRetry.setTypeface(generalUtility.faceAvenirLight); 
     txtExitMessage.setText(R.string.errorMsgInternet); 
     btnCancel.setText(R.string.cancel); 
     btnRetry.setText(R.string.retry); 
     alertDialogBox.setCancelable(false); 
     btnCancel.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       alertDialogBox.dismiss(); 
       Log.d("AlertDialog", "Negative"); 
       YS_WebViewActivity.this.finish(); 
      } 
     }); 
     btnRetry.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       alertDialogBox.dismiss(); 
       Log.d("AlertDialog", "Positive"); 
       tvLoading.setVisibility(View.VISIBLE); 
       webViewLoadUrl.loadUrl(url); 

      } 
     }); 
    } 
    private void myErrorFinish() 
    { 
     /* 
     * Jump to the Setting Screen on pressing back button of device 
     */ 
     YS_WebViewActivity.this.finish(); 
     //overridePendingTransition(R.anim.abc_slide_in_bottom, R.anim.abc_slide_out_bottom); 
    } 

    @Override 
    public void onBackPressed() 
    { 
     myErrorFinish(); 
     super.onBackPressed(); 
    } 
    } 

Это XML ...

 <RelativeLayout 
     android:id="@+id/RelativeLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/listback" 
     android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="match_parent" 
     android:layout_height="42dip" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     android:background="@drawable/navigationbackground" /> 

    <Button 
     android:id="@+id/btnDone" 
     android:layout_width="wrap_content" 
     android:layout_height="42dip" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="@android:color/transparent" 
     android:text="@string/done" 
     android:textColor="@android:color/white" 
     android:textSize="17sp" /> 

    <WebView 
     android:id="@+id/webViewLoadUrl" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/btnDone" 
     android:layout_centerVertical="true" /> 

    <TextView 
     android:id="@+id/tvLoading" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:gravity="center" 
     android:text="@string/loading" 
     android:textColor="@android:color/white" 
     android:textSize="18sp" /> 


    </RelativeLayout> 
+0

Вы проверили мой ответ –

+0

сэр это не работает Спасибо за ваш ответ ... –

ответ

1

Если после всего остального ответа ваша проблема по-прежнему остается, вам необходимо указать проверить ваш ответ и формат данных URL/сервера.

+0

ok дайте мне проверить .. –

+0

спасибо MPG .. это была глупая ошибка в ответе, поэтому не показывали данные. –

0

Попробуйте

webview.getSettings().setRenderPriority(RenderPriority.HIGH); 
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
+0

Я пробовал уже это, но не работает. выше я дал эту ссылку, пожалуйста, дайте мне знать еще один вариант, если это возможно .. Спасибо за ответ. –

+0

Попробуйте

+0

Другой способ - Webview.setLayerType (View.LAYER_TYPE_SOFTWARE, null); –

2

с Android 4.4 (октябрь 2013 г.), Google переключилась WebView to use the Chromium rendering engine - шаг, который значительно улучшил скорость, множество новых API и возможность удаленной отладки с помощью Chrome DevTools.

В соответствии с этим Google’s documentation они обновили еще несколько дополнительных функций в Android 5.0, который обеспечивает более высокую производительность для веб-просмотра.

Первый выпуск для Android 5.0 включает в себя версию Chromium для WebView на основе выпуска Хром M37, добавив поддержку WebRTC, WebAudio и WebGL.

Chromium M37 также включает встроенную поддержку всего веб-сайта Спецификации компонентов: Пользовательские элементы, Теневой DOM, HTML-импорт, и шаблоны. Это означает, что вы можете использовать Полимер и его конструкцию материалов элементов в WebView без необходимости полиполнения.

Хотя WebView был основан на Chromium начиная с Android 4.4, слой Chromium теперь можно обновлять из Google Play.

Таким образом, в соответствии с высокими изменениями в веб-просмотре, он будет эффективно загружать данные с более низкими версиями.

Для вашего вопроса, вы можете ускорить работу андроида WebView в вашем случае, как Android webview slow и Android WebView performance или как Android webview loading data performance very slow

Hardware Acceleration сделать ил это trick.You может использовать его в различных уровнях в вашем приложении в этом answer Я упомянул и другие типы.

Я думаю, что лучше всего работает следующее:

if (Build.VERSION.SDK_INT >= 19) { 
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
}  
else { 
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
} 

Надежда этот ответ будет поможет вам.

Смежные вопросы