Экран зависает, пока не вернется функция - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно использовать код, чтобы проверить, есть ли у меня доступ в Интернет, прежде чем я отправлю файлы в базу данных ... это код, который я использую.он работает нормально, если у меня есть подключение к Интернету, но если нет, то он зависает примерно на 6 или 7 секунд

public static boolean isInternetReachable() throws InterruptedException, IOException {
    Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
    int returnVal = p1.waitFor();
    return  (returnVal==0);
}

Я хочу, чтобы он отправлял файлы - файл за файлом - в базу данных, и я хочу проверить, есть ли Интернетработает или нет каждый раз

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019
 Handler hander = new Handler(this);
 handler.postDelayed(new Runnable() {
        @Override
        public void run() {
        //do what you want
  },2000L);
0 голосов
/ 26 февраля 2019

Чтобы проверить, подключен ли пользователь к Интернету, используйте это.

public boolean hasInternetConnection() {
  ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  return manager.getActiveNetworkInfo() != null && manager.getActiveNetworkInfo().isConnected();
}

Ваш экран зависает, потому что вы выполняете долгосрочную задачу (загрузку файлов) в главном потоке, что может привести к тому, что ваше приложение не будет реагировать.Вам придется переместить эту операцию из основного потока, используя AsyncTask, RxJava или Coroutines (Kotlin). Смотрите это

...