经过多次解决方案的试用(包括在SO上发布问题),我会努力工作。但没有改善。回到我的问题,我正在实施一个有倒数计时器的应用程序。我在一个按钮上显示了它(通过禁用点击事件就像使用画布一样)。 当用户点击一个按钮(这是一个单独的按钮)时,我启动计时器。下面是倒计时代码,线程执行延迟+ Android
public class DigitalTimer extends Button{
--------------------------------
--------------------------------
--------------------------------
--------------------------------
--------------------------------
--------------------------------
private String timerText;
public DigitalTimer (Context context,int hourstime,int mintime,int sectime){
super(context);
Log.d(TAG,"DigiTimer constructor");
this.context = context;
initialize(hourstime,mintime,sectime,timerType);
setClickable(false);
}
public void initialize(int hourstime,int mintime,int sectime,int timerType){
Log.d(TAG,"DigiTimer initialize");
this.hourstime = hourstime;
this.mintime = mintime;
hour = hourstime;
min = mintime;
sec = sectime;
//Just Thread version
**digiThread = new Thread(){
@Override
public void run(){
while(!isPauseTimer()){
updateTimes();
SystemClock.sleep(UPDATEDELAY);
}
}
};**
//Handler version
/*
handleRunnable = new Runnable(){
public void run(){
updateTimes();
}
};
*/
}
private void updateTimes(){
timerText = String.format(timerFormat,hour,min,sec);
postInvalidate();
sec--;
if(sec < 0){
sec = 59;
min--;
}
if(min < 0){
min = 59;
hour--;
}
if(hour < 0){ //when hour is negative it means the given time completed so we stop the timer & alarm permanantely
hour = 0;
min = 0;
sec = 0;
}
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Log.d(TAG,"DigiTimer onDraw");
setBackgroundResource(R.drawable.button9patch);
setText(timerText);
}
public void startUpdateTheread(){
//digiHandler.postDelayed(handleRunnable, UPDATEDELAY);
**digiThread.start();**
}
private void startTimersAndAlarms(){
-----------------------
-----------------------
-----------------------
-----------------------
**startUpdateTheread();**
---------------------
---------------------
}
}
最初定时器沃金罚款。 但是如果倒计时的时间没有更高(比如说5:00:00),那么它的运行会很好,直到某个时候(比如说4:00:00),它会延迟计时器更新。 (只需倒计时一分钟就会花费更多时间......特别是当用户不在应用程序中时) 首先,我尝试使用处理程序。我遇到了问题。我认为延迟是因为保持UI线程繁忙。所以我开发了一个单独的线程。但问题仍然存在。
对不起,很长的文章。请有人指出发生了什么事。那是我遗失的东西还是把代码放在错误的地方?
感谢
编辑:我读SystemClock.sleep文档。它说:“{当系统进入深度睡眠(CPU关闭,显示黑暗,设备等待外部输入)时,此时钟停止}”。我明白我应该在运行此线程时保持CPU处于开启状态。所以根据@Brandon的回答,我应该实现部分POWERLOCK以保持CPU处于开启状态。我的理解是否正确?
感谢您的回答。是。我已经实现了唤醒锁来保持屏幕开启。这是工作。但我的问题是当用户退出App时管理倒数计时器。即当用户退回到应用程序时,如果用户退出(主页或后退按钮)应用程序,当计时器显示03:30:00 ... 1分钟后,应该显示03:31:00。它也显示了这一点,但有时延迟了一段时间。 – droidsites
请看我的编辑 – droidsites