Вы можете попробовать расширить WebChromeClient, переопределить onProgressChanged(WebView view, int newProgress)
и зарегистрировать его в WebView с помощью метода setWebChromeClient(WebChromeClient)
. Это освободит ваше приложение от дополнительного потока, который вы запускаете, просто чтобы проверить, изменился ли прогресс. Воспользуйтесь обратным вызовом, это проще. Так что это было бы первым делом.
Еще одно - я тоже экспериментировал с этим статусом прогресса и пришел к некоторым выводам о том, как он себя ведет:
- для некоторых случаев использования (таких как проверка, находится ли страница даже под заданным URL-адресом), оно должно быть больше 10. Когда WebView устанавливает соединение с предоставленным URL-адресом, он автоматически устанавливает значение прогресса равным 10, даже если он это сделал. не установить успешное соединение, если оно больше 10, то вы можете быть уверены, что URL-адрес будет доступен и загрузка начнется,
- Прогресс будет возвращен как 100% при вызове
stopLoading()
в вашем WebView,
- Имея в виду предыдущую точку зрения, также, когда WebView не сможет загрузить полный сайт (например, для изображения получится тайм-аут), он сообщит, что страница была полностью загружена (100%)
Подводя итог, можно сказать, что этот индикатор выполнения показывает, завершил ли WebView загрузку сайта или нет, но с точки зрения WebKit, а не с точки зрения загрузки страницы полностью. Вы должны иметь в виду, что соединение может оборваться, ресурсы (изображения, CSS, JS) могут не загружаться по какой-то причине, JavaScript может загрузить некоторые дополнительные ресурсы, когда страница завершит загрузку и т. Д., Этот прогресс не может сказать вам, если сайты контент был полностью загружен или нет, он говорит вам, что WebView считает, что это должно быть все.
У меня нет других идей о том, как проверить, была ли страница полностью загружена или нет, я думаю, что это единственный способ.