Я сделал простое приложение таймера, которое обновляет просмотр текста каждую секунду.
Я хочу, чтобы он каждые 10 секунд издавал звуковой сигнал общей продолжительностью 100 секунд.
Вот как я это сделал (очень схематично):
static long second, ticker, uptimemilli;
onCreate() {
second = ticker = 0;
Handler mHandler = new Handler();
uptimemilli = SystemClock.uptimeMillis();
mHandler.postAtTime(mUpdateTimeTask, uptimemilli+1000*ticker++);
}
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
if (second == 100)
return;
UpdateMyTextView(second++);
if (second%10 == 0)
PlayBeep();
mHandler.postAtTime(mUpdateTimeTask, uptimemilli+1000*ticker++);
}
};
Это хорошо работает, когда дисплей телефона включен. TextView обновляется каждую секунду, и он дает звуковой сигнал каждую 10-ю секунду. Однако я хочу, чтобы приложение издавало звуковой сигнал каждые 10 секунд, даже если я выключаю дисплей. Проблема в том, что когда я это делаю (коротким нажатием на кнопку питания), цикл таймера кажется замедленным. Я получаю звуковой сигнал, возможно, каждые 20-25 секунд. Таким образом, postAtTime не работает, когда экран выключен. Кто-нибудь знает, почему и как я могу заставить postAtTime запускаться в указанное время, даже когда экран выключен?