Создание экземпляра Socket блокирует поток на случайное время, если нет доступного соединения - PullRequest
2 голосов
/ 30 ноября 2010

Попытка открыть сокетное соединение в отдельном потоке, вызвав это:

Socket sc = sc = new Socket(address, Integer. parseInt(port));

Но есть проблема, если нет активного интернет-соединения, которое блокирует эта тема, на моем htc hero 2.1 на 30 секунд и моем эмуляторе Android 2.2 на 2 минуты.

Я пытался использовать этот метод перед открытием соединения:

public static boolean isOnline()
{
             ConnectivityManager cm = (ConnectivityManager) app.getInstance().getSystemService(Context. CONNECTIVITY_SERVICE);
             if(null != cm.getActiveNetworkInfo())
                   return cm.getActiveNetworkInfo().isConnectedOrConnecting();
             return false ;
}


public void run()
{
    if(!isOnline())
        throw new IOException("internet not connected");
    Socket sc = new Socket(address, Integer. parseInt(port));
}

И все хорошо, но если активное соединение будет потеряно после вызова isOnline и перед новым вызовом Socket, он все еще блокируется на случайное время.

Мой вопрос, есть ли возможность решить эту проблему? или просто заблокировать эту ветку на фиксированное время на 2-3 секунды?

1 Ответ

1 голос
/ 30 ноября 2010

Я предлагаю позвонить thread.interrupt() после истечения времени ожидания.

Возможно, вы также захотите получить источник Android и посмотреть, где он проводит все это время.Это может дать вам некоторое представление о других подходах к решению этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...