У меня запланированный сервис (для планирования я использую пакет BroadcastReceiver и AlarmManager). Сервис выполняет некоторые длительные операции, используя AsyncTask.
- Подключиться к серверу
- Проверить наличие обновлений
- Загрузка обновлений, если они существуют
- Выполнение операций обновления данных
Я вызываю задачу из метода onStart следующим образом:
onStart(...){
...
new AsyncUpdate(...).execute(...);
}
Пользователь может выполнять операции обновления вручную (он нажимает кнопку, которая запускает Сервис).
Так что, если он нажимает кнопку во время выполнения задачи AsyncUpdate? По ссылке будет создан новый рабочий поток, поэтому мне нужно их синхронизировать.
Для этого я использую статический параметр из моего класса Service:
synchronized(MyService.runLock){//public static Object runLock = new Object();
...perform download and update operations
}
Это правильно?
Раньше я использовал: удаленный сервис, поэтому Сервис выполнялся в отдельном потоке, и мне не нужно было синхронизировать их, потому что я знал, что у меня всего один поток.