Сервис на андроиде?

Я создал приложение, которое выполняет синхронизацию с сервером. У меня уже есть код, который выполняет синхронизацию после того, как пользователь нажал кнопку. Теперь пришло время добавить туда Сервис. У меня есть следующие вопросы относительно сервисов для Android:

  1. будет ли запущена служба, если пользователь никогда раньше не запускал приложение? (то есть только что установил это)
  2. когда служба будет запущена в первый раз? могу ли я запустить его из onCreate основного приложения?
  3. если пользователь нажимает кнопку «Синхронизировать» в приложении, должен ли я запустить эту службу или у меня должен быть другой процесс для одного и того же? Как тогда проверить, что фоновая синхронизация при этом не происходит?
  4. следует ли использовать ASyncTask, даже если служба запущена как

    startService(новое намерение(это, ServiceSync.class));


person LA_    schedule 31.03.2011    source источник
comment
@mgv, я помню об этом и скоро сделаю это - просто нужно еще раз просмотреть все мои вопросы (к сожалению, не на все из них есть ответы).   -  person LA_    schedule 02.04.2011


Ответы (1)


Предпочтительным подходом к синхронизации данных в Android является предоставление SyncAdapter для выполнения синхронизации. У вас есть очень хорошая сводка необходимых шагов в этом сообщение.

Вы также найдете эти статьи полезны.

Редактировать:

1-2-3. Вы можете использовать привязанную службу. для управления способами взаимодействия и обслуживания из вашей деятельности. У вас есть полные рабочие образцы в предоставленной ссылке. По сути, вы привязываетесь к службе в методе onStart своей активности и отвязываете onStop.

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

4: Вам не нужен AsyncTask здесь.

person mgv    schedule 31.03.2011
comment
Могу ли я использовать его, если я не хочу добавлять данные учетной записи на экран «Учетные записи и синхронизация» и хочу отображать их только в своем приложении? - person LA_; 31.03.2011
comment
К сожалению, вам необходимо создать учетную запись. Однако я не могу придумать сценарий, в котором создание учетной записи навредит вашим пользователям. Наоборот, вы будете хорошо работать с экосистемой Android и предоставите своим пользователям возможность синхронизировать желаемый контент. Хорошо также делегировать ответственность за постановку попыток синхронизации в очередь системе и не заниматься этим самостоятельно. - person mgv; 31.03.2011
comment
Авторизация происходит через OAuth. Понятия не имею, что пользователю придется вводить в качестве имени пользователя и пароля;). - person LA_; 31.03.2011
comment
Например, Twitter использует OAuth, и вы можете добавить учетную запись Twitter :). По сути, вы отвечаете за реализацию кода, который будет обрабатывать токен аутентификации. - person mgv; 31.03.2011
comment
Хорошо, теперь я это вижу. Таким образом, я могу реализовать любую авторизацию, которая мне нужна. Однако лишь несколько приложений используют этот (правильный) подход. Но сейчас образцы выглядят для меня немного сложными, так что оставлю это для второй фазы моего проекта ;). Не могли бы вы помочь мне с обслуживанием на этот раз? ;) - person LA_; 01.04.2011
comment
Спасибо! Если я реализую подход, который вы изначально предложили - (1) можно ли открыть этот экран «Учетные записи и синхронизация» (или даже добавить новую учетную запись моего приложения) из моего приложения, скажем, нажав кнопку? (2) сможет ли пользователь запустить синхронизацию вручную непосредственно из моего приложения? Если да, то, вероятно, этот подход лучше пойти. - person LA_; 01.04.2011
comment
1) Конечно, вам просто нужно проверить, существует ли действующая учетная запись, и активировать любую активность, которую вы хотите, если ее нет. 2) Конечно. Прочитайте мой последний комментарий к ответу jcwenger, который я опубликовал ранее: " title="почему contentresolver requestsync не запускает синхронизацию"> stackoverflow.com/questions/5253858/ - person mgv; 01.04.2011
comment
Хорошо, я добавил учетные записи и синкадаптер в свое приложение. В моем случае ContentProvider является фиктивным (stackoverflow.com/questions/4649808/< /а>). Как определить частоту обновлений? - person LA_; 03.04.2011
comment
Вы не должны задавать вопросы в разделе комментариев. Поместите новый вопрос для каждого, чтобы он отображался в результатах поиска. На ваш исходный вопрос уже был дан ответ. - person mgv; 03.04.2011