如何为我的Android应用添加睡眠计时器

时间:2019-05-22 02:27:07

标签: java android timer sleep

我的项目是一个无线电应用程序,我想添加一个睡眠计时器,以便用户可以将其设置为在指定时间后关闭应用程序。

3 个答案:

答案 0 :(得分:0)

Thread.sleep(2000);

将暂停2秒(即2000毫秒)。几年前,我在一个Android应用中写过:

Thread.currentThread().sleep(2000);

但是我很确定不需要.currentThread()。当时我只是在学习Java。

请参见Oracle's doc

更详细地讲,我实际上拥有的是一项单独的任务:

class TimerUpdater extends AsyncTask<String, String, Void>{
  }

那会定期检查时间(使用Thread.sleep()暂停)并显示倒计时,并在零位置设置一个标志,该标志表示主要任务会定期检查并在设置完成后结束游戏。

我的应用程序是糟糕的代码,但是我尽可能快地同时学习Java和Android,以开发出一款可以帮助我的孩子上数学课的应用程序。

从那以后,Android发生了很大变化。

答案 1 :(得分:0)

您可以从用户那里获取时间,然后您可以创建一个后台进程,该进程每次都在计算时间并与用户时间进行核对。如果两者都匹配,请立即关闭您的应用

答案 2 :(得分:0)

请使用startTimer(long ms)启动倒数计时器,并使用取消计时器停止计时。并在屏幕关闭后使用唤醒锁继续计时。

CountDownTimer cTimer = null;
void startTimer(long time) {
     if(!wakeLock.isHeld()) {
        PowerManager mgr = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
        wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SonaHeartLock");
        wakeLock.acquire();
    }
    cTimer = new CountDownTimer(time, 1000) {
        public void onTick(long millisUntilFinished) {

            timerSync = millisUntilFinished;
        }

        public void onFinish() {

            timerSync = 0;

            System.exit(0);

        }
    };
    cTimer.start();
}


//cancel timer
void cancelTimer() {

    if (cTimer != null) {
        timerSync = 0;
        cTimer.cancel();
        cTimer=null;
        if(wakeLock!=null && wakeLock.isHeld())
            wakeLock.release();
    }

}