Сервис Android в фоновом потоке - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь создать сервис, который запускается через заданный интервал.Цель службы - обновить базу данных и, когда это будет сделано, уведомить Activity с помощью Intent.

. Служба также должна вызываться из действия, когда пользователь выбирает «обновить».

Я выполнил это, но не могу запустить его в отдельном потоке.

Служба выполняет метод обновления в Runnable:

private Runnable refresh = new Runnable() {
        public void run() {
            update();   //Runs updates
            didUpdate(); //Sends broadcast
            handler.postDelayed(this, 50000); // 50 seconds, calls itself in 50 secs
        }
    };

У меня есть другой runnable, называемый ManualRefresh, который вызывается через трансляцию из действия.

Однако эти runnables, кажется, блокируют пользовательский интерфейс.

Нужен совет!:)

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Когда вы запускаете Runnable, вызывая его метод run, он запускается в текущем потоке.Для запуска в фоновом потоке вам нужно использовать new Thread(refresh).start(); (если вы хотите запустить Runnable refresh).

Вы также можете использовать AsyncTask для этого, но это больше подходит для действиячем для службы.Информацию об использовании AsyncTask можно найти в API документах и в статье Безболезненная обработка потоков .

0 голосов
/ 20 сентября 2011

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

После обновления вы можете уведомить об активности с намерением (как вы упомянули).

Если пользователь хочет обновить вручную, отправьте Приложение в службу Intent. При получении намерения от AlarmManager или от Activity будет выполнен тот же код.

Вы также можете перепланировать будильник после запроса на обновление вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...