OnPageStart se llama muchas veces y onPageFinished no se llama para una sola página

Mi pregunta es diferente de esto chicos .. I wany mi diálogo de progreso de inicio cuando la carga de la página comienza y termina cuando la carga de la página terminó en mi webview. Mi problema es el diálogo del progreso comienza y nunca consigue dismissed. He fijado puntos de rotura que demuestra que el diálogo del progreso comienza y consigue despedido muchas veces entonces él comienza y no consigue despedido incluso después de que la carga de la página terminó. Mi pregunta es por qué el onPageStarted se ejecutó muchas veces para una sola página de carga? Y por qué onPageFinished no llamado después de la finalización de la carga de la página?

myWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { myWebView.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(myWebView, url, favicon); Log.d("mytag","Page Loading Started"); //myURLProgressDialog= ProgressDialog.show(WebviewExampleActivity.this, "Page Loading", "Wait for a moment..."); } @Override public void onPageFinished(WebView view, String url) { Log.d("mytag","Page Loading Finished!"); super.onPageFinished(myWebView, url); //myURLProgressDialog.dismiss(); } }); 

Mi auto etiquetado filtrado Registro es como este para cargar una sola página:

  10-06 10:32:49.298: DEBUG/mytag(508): Page Loading Started 10-06 10:32:49.998: DEBUG/mytag(508): Page Loading Started 10-06 10:32:50.048: DEBUG/mytag(508): Page Loading Finished! 10-06 10:32:50.048: DEBUG/mytag(508): Page Loading Started 10-06 10:33:00.898: DEBUG/mytag(508): Page Loading Finished! 

Cuando estoy haciendo clic en el enlace en la página ya cargado funciona bien. Aquí está Log:

 10-06 10:59:25.098: DEBUG/mytag(543): Page Loading Started 10-06 10:59:30.889: DEBUG/mytag(543): Page Loading Finished! 

Compruebe si ya está abierto con .isShowing() .

 final ProgressDialog mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage("Loading..."); browser.setWebViewClient(new myViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); if(!mProgressDialog.isShowing()) { mProgressDialog.show(); } } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if(mProgressDialog.isShowing()){ mProgressDialog.dismiss(); } } }); 

Si tiene llamadas ajax en la página que se está cargando, onPageFinished () se llamará sólo cuando terminen esas llamadas. Mejor hacer esas llamadas con un window.setTimeout (). En ese caso, el hilo de la interfaz de usuario no se bloqueará en esas llamadas y onPageFinished () se llamará tan pronto como se cargue la página principal.

A veces sucede que cuando la página inicial se carga, algún script hace una redirección (porque necesitaba un ID de sesión o algo que haría que la página se volviera a cargar).

Puede comprobar si se está cargando una página diferente (o la misma con parámetros adicionales) registrando el parámetro url.

Supongo que si se realiza una nueva solicitud de carga antes de que la primera página termine de cargarse, el método OnPageFinished no se llamará para esa primera página.

Aquí hay una solución. En lugar de un diálogo de carga, utilizo otra vista web como pantalla de bienvenida, pero puedes cambiarla fácilmente.

El truco es, para ver si hay un nuevo "onpagestart" justo después de la "onpagefinished". Si este es el caso, no cierre la carga y espere a que el siguiente "onpagefinished".

 myWebView.setWebViewClient(new WebViewClient() { boolean loadingFinished = true; boolean redirect = false; long last_page_start; long now; // Load the url public boolean shouldOverrideUrlLoading(WebView view, String url) { if (!loadingFinished) { redirect = true; } loadingFinished = false; view.loadUrl(url); return false; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.i("p","pagestart"); loadingFinished = false; last_page_start = System.nanoTime(); show_splash(); } // When finish loading page public void onPageFinished(WebView view, String url) { Log.i("p","pagefinish"); if(!redirect){ loadingFinished = true; } //call remove_splash in 500 miSec if(loadingFinished && !redirect){ now = System.nanoTime(); new android.os.Handler().postDelayed( new Runnable() { public void run() { remove_splash(); } }, 500); } else{ redirect = false; } } private void show_splash() { if(myWebView.getVisibility() == View.VISIBLE) { myWebView.setVisibility(View.GONE); myWebView_splash.setVisibility(View.VISIBLE); } } //if a new "page start" was fired dont remove splash screen private void remove_splash() { if (last_page_start < now) { myWebView.setVisibility(View.VISIBLE); myWebView_splash.setVisibility(View.GONE); } } }); 

Cuando una página se envía en la aplicación webview: onPageStarted se disparó, pero onPageFinished no se disparó para seguir el código siguiente fijo y exactamente

  ProgressDialog pd = null; @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); if(pd == null || !pd.isShowing()) { pd = new ProgressDialog(MainActivity.this); pd.setTitle("Please wait"); pd.setMessage("App is loading..."); pd.show(); } } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (pd != null) { pd.dismiss(); } } 
  • Webview - cambiar la fuente de la página antes de mostrar el sitio web?
  • Android WebView para Facebook como botón
  • WebViewClient.onPageStarted () llamó dos veces al especificar URL no existente a través de WebView.loadURL ()
  • El controlador onScaleChanged de WebView se llama varias veces
  • Android: abra los vínculos _blank de destino en WebView con un navegador externo
  • ShouldOverrideUrlLoading se llama SOLAMENTE para ALGUNAS páginas web
  • Android: comprueba si la solicitud es GET o POST
  • Vista Web de Android
  • Obtener recursos de WebView que ya se ha descargado
  • El bloqueo del sistema al reemplazar shouldInterceptRequest en WebViewClient
  • Android 4.4 dando ERR_CACHE_MISS error en onReceivedError para WebView volver
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.