我已尝试过多种方法让一个持久计时器在多个活动中更新ui,似乎没有任何工作。我尝试过AsyncTask,Handler和CountDownTimer。下面的代码不执行第一个Log.i语句....有没有更好的方法来启动Main(这是唯一的持久类)中的计时器(必须从另一个类调用)?
public static void MainLawTimer()
{
MainActivity.lawTimer = new CountDownTimer(MainActivity.timeLeft, 1000)
{
public void onTick(long millisUntilFinished)
{
Log.i("aaa","Timer running. Time left: "+MainActivity.timeLeft);
MainActivity.timeLeft--;
if(MainActivity.timeLeft<=0)
{
//do stuff
}
else
{
//call method in another class
}
}
public void onFinish()
{ }
}.start();
}
澄清我的问题:
当我运行代码时,Log.i(“aaa”,“Timer running”)语句永远不会显示在日志中,并且CountDownTimer似乎永远不会启动。 MainLawTimer仅从另一个类调用(不在同一个类中。
答案 0 :(得分:1)
对于CountDownTimer
http://developer.android.com/reference/android/os/CountDownTimer.html
您可以使用Handler
Handler m_handler;
Runnable m_handlerTask ;
int timeleft=100;
m_handler = new Handler();
@Override
public void run() {
if(timeleft>=0)
{
// do stuff
Log.i("timeleft",""+timeleft);
timeleft--;
}
else
{
m_handler.removeCallbacks(m_handlerTask); // cancel run
}
m_handler.postDelayed(m_handlerTask, 1000);
}
};
m_handlerTask.run();
定时器
int timeleft=100;
Timer _t = new Timer();
_t.scheduleAtFixedRate( new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() //run on ui thread
{
public void run()
{
Log.i("timeleft",""+timeleft);
//update ui
}
});
if(timeleft>==0)
{
timeleft--;
}
else
{
_t.cancel();
}
}
}, 1000, 1000 );
您可以使用AsyncTask
或Timer
或CountDownTimer
。
答案 1 :(得分:0)
谢谢大家的帮助,我在我的代码中发现了错误... timeLeft是几秒钟而不是毫秒。由于timeLeft低于1000(等待期),计时器从未开始。