mark_edinoroglove
@mark_edinoroglove

Почему зависает приложение?

есть код позволяющий проверять есть ли интернет в текущий момент
if (haveInternet(this)) {
                        webView.loadUrl("-----");
                        progressDialog.setMessage("Загрузка PLUMBEAR...");
                    } else {
                        while(true) {
                            progressDialog.setMessage("Ожидание доступа в интернет...");
                            if(haveInternet(this)) {
                                webView.loadUrl("----");
                            }
                        }
                    }

проблема такова то что когда начинается работа цикла, приложение зависает, как это можно пофиксить?
  • Вопрос задан
  • 132 просмотра
Решения вопроса 2
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Зависает по понятной причине - запуск бесконечного цикла на ui потоке.
Это принципиально неправильный подход. Нужно слушать появление\исчезновение сети через ConnectivityManager
Ответ написан
Комментировать
@AlexVWill
Нельзя делать в приложении бесконечные циклы, тем более в UI, система принимает такие приложения за зависшие (что, по сути и является) и принудительно закрывает их. Проверку лучше делать однократно, непосредственно пред исполнением нужного кода например вот так:

boolean connected = false;
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
        //we are connected to a network
        connected = true;
    }
    else
        connected = false;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы