2015-11-05 3 views
1

У меня есть Asynctask, которая работает непрерывно, чтобы получить геокоординированные данные с определенным интервалом времени. Он работает до тех пор, пока пользователь не выйдет из действия, но у меня есть кнопка паузы, которая приостанавливает асинтез и кнопку возобновления, которая возобновит асинтез из позиции, которую она приостановила. Итак, как это сделать.Pause and Restore Async Task в Android

http://i.stack.imgur.com/3SomI.png

+0

Вы должны использовать Профилированного поставщика местоположения, он делает все это автоматически. вы устанавливаете, как часто получать новое местоположение, и вызываете простые методы 'connect()' и 'disconnect()' to 'pause' it – Breavyn

+1

* Asynctask ... для получения геокоординированных данных * ... интересно, я wana см. это, это был очень плохой дизайн (есть ли задействованный getLastKnownLocation?), это не то, как мы получаем обновления коордов) ... вернуться к теме ... ** «AsyncTask» предназначен для выполнения определенной работы на фоне и return ... не для «инфинитивных циклов» **, поэтому «приостановка AsyncTask» не вызывает чувства – Selvin

+0

На самом деле цикл не для получения геокоординированных данных. его для таймера обратного отсчета с индикатором выполнения циклического заполнения. например. Если я установил таймер на 10 секунд, тогда прогресс и таймер будут отсчитываться до 10 секунд в течение следующих 10 секунд, пока пользователь не выйдет из приложения. Поэтому я помещаю как таймер обратного отсчета, так и прогресс обновления внутри aysynctask. Итак, теперь, когда я хочу нажать кнопку паузы, я хочу приостановить таймер и продолжить с получением динамических местоположений из метода изменения onlocation. и когда я нажму на кнопку возобновления, он возобновится с позиции, где он будет приостановлен. –

ответ

0

вы должны знать, что AsyncTask обычно используется для задач, которые занимают много времени, чтобы завершить, задачи, которые считаются ограниченными в основном потоке. Вот почему его использовали в http-соединениях с серверами, например. Iv также читал, что метод doInBackground не может получить доступ к пользовательскому интерфейсу, поэтому, когда вы обновляете индикатор выполнения внутри метода, он не работает, вместо этого вы можете получить доступ к пользовательскому интерфейсу от onPreExecute и onProgressUpdate, а также к методам onPostExecute.

это может помочь вам понять, как именно работает AsyncTask: https://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/

и это: http://www.compiletimeerror.com/2013/01/why-and-how-to-use-asynctask.html#.Vjs3QrcrLcs

0

я работал на Дитто одном приложении для одного клиента несколько месяцев назад. Async Task - это действительно плохая идея, чтобы добиться отпора; Действительно действительно неудачная реализация.

я использую следующим образом:
-1 Создание свой собственный LocationListener
-2 Создание свой собственный сервис, который овладевает этой LocationListener до тех пор, как у меня есть контекст зарегистрирован в LocationListener и сохраняет возвращая LatLng или просто сохраните их в фоновом режиме. Мне пришлось загрузить на сервер.
-3 Удаление обновлений из LocationListener внутри службы и службы убийства по завершении.
-4 Повторите при необходимости.

дайте мне знать, если вам все еще нужен подробный код.

PS Read this about Async Task если вы все еще продолжаете выполнять свою реализацию.