我已經實現了一個擴展了CountDownTimer的類,它工作良好,但是當屏幕關閉時,定時器被去同步化,所以想法是,當我離開活動或屏幕關閉,CountDownTimer應繼續正常工作。我有權限<uses-permission android:name="android.permission.WAKE_LOCK"/>
,我也嘗試過PowerManager
,但我認爲問題不在那裏。當屏幕關閉時,倒計時器不能正常工作
PowerManager pm = (PowerManager) getSystemService((MenuApp.this).POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();
myTimer = new CustomTimer(min, 1000);
myTimer.start();
wl.release();
。
@TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi")
public class CustomTimer extends CountDownTimer
{
public CustomTimer(long millisInFuture, long countDownInterval)
{
super(millisInFuture, countDownInterval);
byteTimer = 1;
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
@Override
public synchronized void onTick(long millisUntilDone)
{
String hms = String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millisUntilDone)- TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilDone)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilDone)-TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilDone)));
tim.setText(hms);
edit.putLong("Minute", millisUntilDone-1669);
edit.commit();
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
@Override
public synchronized void onFinish()
{
tim.setText("00:00");
seconds = 0L;
if(btnToggle.isChecked()){
btnToggle.setChecked(false);
btnToggleTimer.setChecked(false);
}else{
btnToggle.setChecked(true);
btnToggleTimer.setChecked(false);
}
}
}
「我也試過PowerManager,但我認爲問題不在那裏」 - 是的,它是。您已經安排了讓設備保持清醒狀態,以創建一個'CustomTimer'實例並調用'start()'。然後設備可以重新入睡。 – CommonsWare 2014-09-01 22:25:45
Hi CommonsWare,你建議我做什麼?我的意思是計時器正在工作,但是如果我離開活動,不停止5分鐘,停止5分20秒。 – Soyer 2014-09-01 22:34:33
@Soyer嘿,我有類似的問題;你最終做了什麼?謝謝! – user3651766 2015-07-10 22:02:14