#java #android #retrofit
Хотелось бы узнать как оптимальней всего будет реализовать проверку интернет соединения
в сетевом приложении.
Я использую Retrofit2, каждых n секунд мне необходимо опрашивать сервер.
реализую okhttp3.Interceptor
@Override
public Response intercept(Chain chain) throws IOException {
if (!NetworkUtils.isNetworkAvailable(mContext)) {
throw new NetworkException();
}
}
когда выполняю запрос на сервер, retrofit2. Callback в методе обратного вызова
onFailure(Call call, Throwable t) проверяю if (t instanceof NetworkException)
то единожды вывожу сообщение о отсутствии интернет соединения.
Но меня смущает то, что при кажом опросе сервера мне необходимо выполнять проверку
isNetworkAvailable, в которой
"дергать" ConnectivityManager getActiveNetworkInfo(), проверять instanceof в onFailure()....
поэтому я не уверен в том что это наилучший подход.
Подход с определением broadcastreceiver`a, слушающего события изменения статуса сети
мне кажется более оптимальным,
событиеориентированным, но он считается deprecated.
Поэтому хотелось выяснить, как реализовать проверку интернет соединения наиболее
оптимально.
Ответы
Ответ 1
Самое лучшее решение: перестать изобретать велосипеды и части операционной системы. Пользователь сам знает что у него есть. Просто делайте свою работу, ради чего приложение написано. Если есть сеть, то это еще не значит, что ваш хост доступен, к примеру, из-за перегруженности сети. Просто напишите сообщение "Не могу сконнетиться" и все. До кучи на один пермишшен меньше. Если опрашиваете какой-то ресурс с высокой частотой, то самое время сменить рабобязательно корректно обрабатывайте ошибки и говорите пользователю. Можно даже сделать настройку вида "При проблемах с обновлением: остановиться / продолжать 1 минуту / продложать всегда". Как и когда сеть появится, что нужно сделать - ЭТО НЕ ВАШЕ ДЕЛО, пользователь и его ОС сами это решат, а подобные велосипеды лишь приводят к тому, что надо будет передергивать подключения/проводки/выходить и заходить.
Комментариев нет:
Отправить комментарий