Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并两个服务?_Java_Android_Multithreading_Android Activity_Service - Fatal编程技术网

Java 合并两个服务?

Java 合并两个服务?,java,android,multithreading,android-activity,service,Java,Android,Multithreading,Android Activity,Service,我有一个后台有计时器的服务。此计时器在经过20秒后执行特定任务。我希望相同的计时器执行另一个任务,但秒数不同。同时启动这两项服务将很容易,但我正在尝试学习如何以另一种方式完成这项工作 我试过这个,但它没有出现: cdt = new CountDownTimer(20000, 1000) { @Override public void onTick(long millisUntilFinished) { Log.

我有一个后台有计时器的服务。此计时器在经过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");
现在,我应该在10秒钟内收到两条不同的日志消息。相反,我只得到一个。这是我的日志:

箭头指示应该有另一条日志消息的位置


我迷路了。我将非常感谢任何反馈(正面或负面)!非常感谢您的帮助。

正如您自己所说,您可以同时启动这两项服务

或者在第一个服务中,您可以传递带有一些参数的
Intent
,以通知新的时间量,然后调用
startService()

我的意思是,修改您的
服务
,从呼叫
意图
中获得额外的服务,类似这样:

@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秒,以此类推

完成计时器后,可以将
意图
传递给新的
服务
/timer,添加所需的秒数。比如:

it.putExtra("Time", timeInMillis + 5000);
使用这种类型

 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();

}

快乐编码:)

您的日志未显示,因为:

            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)

谢谢你的回复!问题在于,10秒是在最初的20秒之后计算的。我的目标是计算20秒,但在计算10秒后(在同一个计时器中),然后显示日志。我该怎么做?谢谢我什么时候加点,因为我只想在10秒钟后加点。另外,还有一个旁注:我正计划在更多的时间间隔后发送这些消息。例如,5号、10号和15号;为每个人提供新的服务将是一件痛苦的事。我还有其他方法可以做到这一点吗?如果没有,那没关系,告诉我你给的代码的意图放在哪里。非常感谢!我认为有很多方法可以让你做到这一点。。。我的编辑就是其中之一。如果你真的在使用
服务
课程。谢谢,我给你的答案打了最好的分数,并且喜欢你的帖子!谢谢你的回答!如果(millisuntilfeigned==10000),我已经完成了最后一个方法。问题是,倒数计时器不准确,所以它不一定会达到10000大关。
    if(millisUntilFinished == 10000)