我的项目是一个无线电应用程序,我想添加一个睡眠计时器,以便用户可以将其设置为在指定时间后关闭应用程序。
答案 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();
}
}