毎秒テキストビューを更新する簡単なタイマーアプリケーションを作成しました。 合計100秒間、10秒ごとにビープ音を鳴らしたい。 はBasciallyこれは、私はそれ(非常に概略的な)作った方法です:携帯電話のディスプレイがオンのとき画面がオフになってからpostAtTimeが適切なタイミングで起動しないのはなぜですか?
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を作ることができますか?
ありがとうございました!短いフォローアップの質問。 AlarmManagerは、画面が暗くなった後、特定の時刻に何かをトリガする唯一の方法ですか? – Anders
@アンダー:「AlarmManagerは、画面が暗くなってから特定の時間に何かをトリガーする唯一の方法ですか?確かに最も電力効率の良い方法です。それ以外の場合は、いつでもデバイスの電源をオンにする必要があります(例えば、「WakeLock」)。 – CommonsWare