Остановка экрана во время связи (клиент / сервер) в Android - PullRequest
1 голос
/ 26 июля 2011

У меня есть приложение, в котором есть карта Google, наложения местоположений на карте Google и отдельный поток, который отправляет текущее местоположение устройства на сервер через каждые 30 секунд.Проблема в том, что когда поток отправляет местоположение на сервер, экран устройства останавливается до тех пор, пока сервер не ответит.Вот следующий код:

Глобальный объект

private Handler handlerTimer = new Handler();

В методе onCreate

 handlerTimer.removeCallbacks(taskUpdateStuffOnDialog );
 handlerTimer.postDelayed(taskUpdateStuffOnDialog , 100);

А вот taskUpdateStuffOnDialog

    private Runnable taskUpdateStuffOnDialog = new Runnable() 
    {        
        public void run() 
        { 
        try
        { 
        URL url3 = new URL("http://"+ appState.getURL()+"//iLocator/IDForClient.php?reg_no="+ Device_ID[0]);
        HttpURLConnection conn = (HttpURLConnection) url3.openConnection();
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String quote = reader.readLine();
        while (quote != null)
        {
            Device_ID = quote.split("\n");
            quote = reader.readLine();
            bCheckID = true;
        }//End While

        positionOverlay.setID(Device_ID[0]);
        addEvent(Device_ID[0]);

    }//End try
    catch (Exception e) 
    {
        e.printStackTrace();
        Toast.makeText(MainMapActivity.this, "Communication Issue",Toast.LENGTH_LONG).show();       
    }//End catch
handlerTimer.postDelayed(this, 9000);
        }

    };

Пожалуйста, скажите мне, что не так с моим кодом.

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Проблема в том, что, хотя вы порождаете новый поток, вы не порождаете новый процесс .Все, что вы делаете, все еще находится в процессе пользовательского интерфейса, и это блокирует.Вы можете найти дополнительную информацию по теме на developer.android.com .

Самый быстрый и простой способ обойти это - использовать класс IntentService .Это позволит одновременно выполнять только один HTTP-запрос, но позаботится обо всех проблемах для вас.

0 голосов
/ 02 августа 2011

Попробуйте использовать AsyncTask для подключения к Серверу.Смотрите пример здесь: http://developer.android.com/reference/android/os/AsyncTask.html

...