Как сделать так, чтобы Android Service работал, даже если устройство не активировано? - PullRequest
0 голосов
/ 22 мая 2010

Цель моего приложения - сохранять обновления местоположения каждые, скажем, 20 минут.

Я использовал сервис, и он работал нормально, но когда я блокирую экран или он автоматически блокируется, сервис перестает работать. когда я его разблокирую, сервис снова запускается.

выделите мой код:

Service ()

onCreat(){
   call timer();
 }

timer(){
   code
 }

Как заставить мой код работать постоянно в любых условиях?

Ответы [ 2 ]

0 голосов
/ 06 января 2011

Да, используйте AlarmManager для запуска службы каждые 10 минут, например, с setRepeating, как показано ниже.Избавьтесь от таймера в сервисе и просто дайте сервису выполнить задачу в oncreate или onCommand, начиная с завершения.

    int SECS = 1000;
    int MINS = 60 * SECS;
    Calendar cal = Calendar.getInstance();
    Intent in = new Intent(context, YourService.class);
    PendingIntent pi = PendingIntent.getService(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarms = (AlarmManager)context.getSystemService(
            Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
            10 * MINS, pi);

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

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

0 голосов
/ 22 мая 2010

Правильный способ организовать работу службы по расписанию (например, «таймер вызова ()»), включая пробуждение устройства, - это использовать AlarmManager, возможно, вместе с моим WakefulIntentService или что-то подобное.

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