2012-03-21 11 views
6

Estoy usando WebViewClient. ¿Deberíamos estar viendo las devoluciones de llamada en la página de inicio() siempre emparejadas con una devolución de llamada de shouldOverrideUrlLoading()? Si cargo example.com en mi WebView, ¿deberíamos ver que se vuelvan a llamar a los dos métodos? A partir de los documentos:WebViewClient - onPageStarted() vs shouldOverrideUrlLoading()?

onPageStarted()

notificar a la aplicación host que una página se empieza a cargar. Este método se llama una vez para cada carga de cuadro principal, por lo que una página con iframes o conjuntos de cuadros llamará a la página una vez para el cuadro principal. Esto también significa que no se llamará a onPageStarted cuando el contenido de un marco incrustado cambie, es decir, haga clic en un enlace cuyo objetivo sea un iframe.

shouldOverrideUrlLoading()

Dar la aplicación host la oportunidad de asumir el control cuando una nueva url está a punto de ser cargada en la vista Web actual. Si no se proporciona WebViewClient, de manera predeterminada, WebView le solicitará a Activity Manager que elija el controlador adecuado para la url. Si se proporciona WebViewClient, return true significa que la aplicación host maneja la url, mientras que return false significa que la WebView actual maneja la url.

Me puse una declaración de registro en cada método, y veo que no siempre se combinan entre sí. ¿En qué casos no serían?

Gracias

http://developer.android.com/reference/android/webkit/WebViewClient.html

+0

Si devuelve verdadero en 'shouldOverrideUrlLoading()', no se llamará a 'onPageStarted()'. Más allá de eso, es posible que 'onPageStart' a veces no se llame si hay dos solicitudes consecutivas, lo que podría impedir que una de ellas se ejecute. Sin embargo, no estoy tan seguro de esto último. – Jakar

+0

Según los registros que obtuve en mi aplicación, 'shouldOverrideUrlLoading' y' onPageStarted' se pueden llamar en cualquier orden, lo cual es muy confuso. Todavía no descubrí en qué circunstancias sucede esto. – Stan

Respuesta

1

Sé que esta pregunta es viejo, pero de todos modos contestar. AFAIK, se llamará a shouldOverrideUrlLoading() para cada url en la página donde se llamará a onPageStart() solo para la url superior de la página.

+1

Parece que está confundiendo 'shouldOverrideUrlLoading' con' shouldInterceptRequest'. El primero se llama solo una vez por página, el segundo es para cada solicitud http (si es lo que llamas "url"). – Stan

Cuestiones relacionadas