结合两项服务?

时间:2015-11-04 06:01:36

标签: java android multithreading android-activity service

我在后台有一个带定时器的服务。该计时器在经过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:

enter image description here

箭头表示应该有另一条日志消息。

我迷路了。我真的很感激任何反馈(积极或消极)!非常感谢你的帮助。

3 个答案:

答案 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)