Что я пытаюсь сделать:
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.