我在后台有一个带定时器的服务。该计时器在经过20秒后执行某项任务。我希望相同的计时器执行另一个任务,但是在不同的秒数内。通过同时启动这两种服务可以很容易,但我正在尝试学习如何以其他方式实现这一点。
我试过了,但它没有出现:
cdt = new CountDownTimer(20000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.v(TAG, /*"Time remaining " +*/ (millisUntilFinished / 1000) + " seconds left");
if(millisUntilFinished / 10000 == 0){ //TEN SECONDS
Log.v(TAG, (millisUntilFinished % 1000) + " seconds left");
}
}
@Override
public void onFinish() {
Log.v(TAG, "Finished");
现在,我应该在十秒内收到两条不同的日志消息。相反,我只得到一个。这是我的logCat:
箭头表示应该有另一条日志消息。
我迷路了。我真的很感激任何反馈(积极或消极)!非常感谢你的帮助。
答案 0 :(得分:1)
正如您自己所说,您可以同时启动这两项服务。
或者在第一项服务中,您可以传递Intent
一些参数来通知新的时间,然后拨打startService()
。
Intent it = new Intent(getApplicationContext(), YourService.class);
it.putExtra("Time", timeInMillis);
startService(it);
我的意思是,修改您的Service
以从通话Intent
获得额外费用,如下所示:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
long time = intent.getLongExtra("Time",0);
// Do your ticking here, based on that variable.
}
//...
}
编辑:我们假设你想让你的计时器先在5秒钟运行,然后在10点钟,15点运行,依此类推。
完成计时器后,您可以将Intent
传递给新Service
/计时器,添加所需的秒数。像:
it.putExtra("Time", timeInMillis + 5000);
答案 1 :(得分:0)
使用此类型。
cdt = new CountDownTimer(10000, 1000) { //finished on 10 Seconds
@Override
public void onTick(long millisUntilFinished) {
Log.v(TAG, /*"Time remaining " +*/ (millisUntilFinished / 1000) + " seconds left");
}
@Override
public void onFinish() {
Log.v(TAG, "First 10 Seconds Finished");
LoadNextCountdown(); // call the Next Countdown method
}
}
.start();
//Method for Next Countdown
public void LoadNextCountdown()
{
cdt2=new CountDownTimer(10000,1000) { //finished on 10 Seconds
@Override
public void onTick ( long millisUntilFinished){
Log.v(TAG, /*"Time remaining " +*/ (millisUntilFinished / 1000) + " seconds left");
}
@Override
public void onFinish () {
Log.v(TAG, "Next 10 Seconds Finished");
}
} .start();
}
快乐编码:)
答案 2 :(得分:0)
您的日志未显示,因为:
if(millisUntilFinished / 10000 == 0){ //TEN SECONDS
Log.v(TAG, (millisUntilFinished % 1000) + " seconds left");
}
当你有10000毫升完成但10000/10000 = 1而不是0时,你希望它显示。
它应该是:
if(millisUntilFinished / 10000 == 1) || if(millisUntilFinished % 10000 == 0)
或简单地说:
if(millisUntilFinished == 10000)