Android - Обновление местоположения GPS - Необходимо отменить TimerTask - PullRequest
1 голос
/ 08 марта 2012

Что я пытаюсь сделать:

1) Обновлять информацию о местоположении пользователя каждые x минут

2) Использовать таймер и TimerTask для вызова веб-службы, которая записывает последнее местоположениеinfo

Что происходит:

1) TimerTask создан

2) Если телефон пользователя находится в режиме гибернации / спящего режима, вызов веб-службы не работает

3) Похоже, что TimerTask сохраняется в очереди

4) Когда телефон пользователя просыпается, все TimerTask в очереди выполняются немедленно, что приводит к нескольким нежелательным обновлениям местоположения для веб-службы.

Вот фрагмент кода:

timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {

    try
    {
        //validate that the device has an active & working connection
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo();

        //validate the the device network provider is enabled
        if ((eview_locationManagerwifi
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) && (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED))
        {
                UpdateSubscriberLocation(); // call the web service to report location data                                                 
        }
        else
        {
            this.cancel();
        }
    }
    catch (Exception e)
    {


    }

Проверка сетевого подключения и проверки с поддержкой поставщика, по-видимому, оба возвращаются с "true", потому что TimerTask не отменяется, он простоставится в очередь до тех пор, пока не проснется телефон пользователя.

Как я могу отменить задание TimerTask, если по истечении определенного периода времени не получен ответ от веб-службы?Я не смог найти своего рода метод setTimeout в TimerTask.

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Если вам нужны быстрые обновления, используйте WakeLock для предотвращения отключения устройств процессором. Подробности смотрите здесь: http://developer.android.com/reference/android/os/PowerManager.html

Если вам не нужны быстрые обновления (скажем, каждую минуту используйте AlarmManager. Если срабатывает сигнализация, запросите обновление местоположения, отправьте ваши данные и установите следующий сигнал тревоги: http://developer.android.com/reference/android/app/AlarmManager.html

0 голосов
/ 08 марта 2012

Не используйте TimerTask, используйте LocationManager.requestLocationUpdates (). Это не складывается как TimerTask, и это немного упрощает код. Вы также получаете дополнительное преимущество, избегая работы, если местоположение пользователя не меняется.

...