#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 минуту / продложать всегда". Как и когда сеть появится, что нужно сделать - ЭТО НЕ ВАШЕ ДЕЛО, пользователь и его ОС сами это решат, а подобные велосипеды лишь приводят к тому, что надо будет передергивать подключения/проводки/выходить и заходить.
Комментариев нет:
Отправить комментарий