Как реализовать фоновые задачи в Android - PullRequest
2 голосов
/ 06 августа 2011

В моем приложении мне нужны, в основном, две задачи, выполняемые в фоновом режиме.Один - синхронизировать некоторые данные с php-сервером, периодически отправляя значения и обновляя локальную базу данных ответом, а второй - загружать файлы, запрошенные основным потоком с сервера, уведомляя пользовательский интерфейс о завершении загрузки.

Я только хочу делать эти вещи, пока приложение находится на переднем плане.И если пользователи откроют другое приложение, завершат текущие транзакции и прекратят потреблять ресурсы.

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

Другое решение, которое я думалэто реализовать какой-то обработчик, который периодически (например, 20 минут) запускает поток для синхронизации с сервером.Запуск потока также при запросе загрузки и отправка трансляции в конце.

А как насчет этого решения?Является действительным?Если да, как я могу определить, когда приложение (не действие) перестает работать на переднем плане, чтобы отменить сообщения обработчика?

Заранее спасибо

1 Ответ

1 голос
/ 06 августа 2011

Если вы выбираете сервис, я рекомендую вам использовать IntentService http://developer.android.com/reference/android/app/IntentService.html

Когда вы реализуете onHandleIntent , у вас может быть цикл, ожидающий желаемое количество времени.спать, после того, как он проснется, он может выполнить задачу, которую вы хотите.

@Override
protected void onHandleIntent(Intent intent) {
    while(true) {
        yourBackgroundTask();
        // Sleep
        try {
            wait(WAIT_TIME);
        } catch (Exception e) {
            Log.i(TAG, e.getMessage());
            break;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...