Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Регулярное действие по расписанию

#android


Требует реализовать вызов определенной функции раз в N часов. Но если использовать
допустим TimerTask то при погасании подсветки телефона он перестает выполнятся, иначе
говоря работает только когда телефон не спит. Мне же нужно отслеживать постоянно, даже
если телефон спит (Не выключен!).     


Ответы

Ответ 1



Во-первых, нужно добавить в манифест разрешение WAKE_LOCK Во-вторых, подключить AlarmManager public class AlarmClock extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SOME_TAG"); wl.acquire(); // TODO: Что-то делаем wl.release(); } public void ToggleAlarm(Context context, Boolean fire) { AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, AlarmClock.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); if (fire) { am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 3600000, pi); } else { am.cancel(pi); } } }

Ответ 2



Запусти простенький Thread, который скажем каждые N секунд запускает какую то хрень. Примерно так: public class Waiter extends Thread { private static final String TAG=Waiter.class.getName(); private long period; private boolean stop; public Waiter(long period) { this.period=period; stop=false; } public void run() { do { try { Thread.sleep(period); } catch (InterruptedException e) { Log.d(TAG, "Waiter interrupted!"); stop=true; break; } //запускаем свою хрень } while(!stop); Log.d(TAG, "Finishing Waiter thread"); } public synchronized void forceStop() { this.stop=true; } }

Ответ 3



AlarmManager

Комментариев нет:

Отправить комментарий