2014-10-28 2 views
0

Как для телефона Android OS, я разрабатываю приложение, которое будет очищать определенную папку за определенный промежуток времени, скажем каждые 30 минут.Служба очистки файлов

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

1.Service имеет onStartCommand, который будет запущен при запуске службы, могу ли я вызвать здесь функцию, в которой есть Handler, который запускается каждые 30 минут? Пример

public int onStartCommand(Intent intent, int flags, int startId){ 
    cleanUpData(); 
    return START_REDELIVER_INTENT; 
} 

public void cleanUpData() 
{ 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     // call the function again 
     cleanUpData(); 
    } 
    }, "30 mins"); 
} 

Этот код выполняет итерацию cleanUpData каждые 30 минут. a. Это верно? b. Будет ли это мешать производительности? c. Должен ли я использовать отдельный поток, как упоминалось в многочисленных учебниках? d. Должен ли я использовать услугу после? Или есть другой метод?

  1. AlarmManager предоставляет запланированные повторные тревоги, но это не работает, когда телефон находится в спящем режиме. Я не хочу разбудить экран, так как он не требует какого-либо человеческого взаимодействия. Могу ли я игнорировать AlarmManager? Или у AlarmManager есть функции для запуска кода, даже когда телефон находится в спящем режиме, а телефон пробуждается?

Просьба предложить. Заранее спасибо!

+0

Да. вы можете иметь отдельный метод внутри метода onStartCOmmand(). – HackerGK

ответ

0

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

+0

1. Intentservice прекратит обслуживание после того, как не будет ожидающей работы, поэтому я не думаю, что могу использовать intenservice, пожалуйста, предложите, если в противном случае. 2. Я не хочу разбудить устройство без необходимости. Пробуждение, вероятно, включает отображение ON, это не должно происходить. Это можно сделать? –

+0

Да, служба намерения прекратит работу, когда ее работа будет завершена, но вы можете запустить ее снова приемником вещания каждые 30 минут, поскольку вы создадите трансляцию каждые 30 минут. Я не знаю, что вы можете разбудить устройство без пробуждения его отображение, но одна вещь, которую вы можете сделать, приобрести wakelock при запуске службы и отпустить ее или настроить устройство на спящий режим при завершении службы. –

+0

. Я буду использовать новый поток, как вы предложили (вы правы), и я могу использовать Thread. sleep() ждать 30 минут вместо трансляции? Будет ли это вредно? –

Смежные вопросы