Android Timer.schedule在活动和广播接收器中不同

Android Timer.schedule在活动和广播接收器中不同,android,Android,我在活动中安排了两次timeatsk(单击按钮两次),如下所示: @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_timer: addTimer(); break; } } private void addTimer(){ Log.e("----","------"+Thread.currentTh

我在活动中安排了两次timeatsk(单击按钮两次),如下所示:

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.btn_timer:
            addTimer();
            break;
    }
}
private void addTimer(){
    Log.e("----","------"+Thread.currentThread().getName());
    if(timerTask == null){
        timerTask = new TimerTask() {
            @Override
            public void run() {
                timerCount++;
                Log.e("----","------=="+Thread.currentThread().getName());
                Log.e("------","------"+timerCount);
            }
        };
    }
    if(timer == null){
        timer = new Timer();
        timer.schedule(timerTask,1000,1000);
    }
}
结果是:

但我在BroadcastReceiver中安排了两次相同的任务(单击按钮两次): 不活动:

 @Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.btn_timer:
            Intent intent = new Intent();
            intent.setAction("timer");
            this.sendBroadcast(intent);
            break;
    }
}
在广播接收机中:` @凌驾 公共void onReceive(上下文、意图){ addTimer(); }

但结果是

发生的情况是,您只有一个活动实例,因此第二次调用
addTimer()
timerTask
timer
时,它们都是非空的(因为您在第一次单击时已经分配了它们)。因此,您只有一个计时器

每次发送广播时,都会创建一个新的广播接收器实例。每个实例将创建自己的
timerTask
timer
(因为它们是空的)。因此,您将得到多个计时器


使用这些计时器,您究竟想达到什么目的?

我使用计时器计算播放视频的秒数,并将秒数报告给服务。视频将停止和启动多次,因此应该发送多个广播。我如何解决问题?然后您应该将秒数发送给服务,不启动服务中的计时器。你为什么需要计时器?为什么不简单地将开始时间记录在
Date
变量中,然后计算视频停止时播放的秒数。我在onReceive内的20毫秒内收到了多个意图。我需要在指定时间内将意图添加到列表中。我该怎么做?
private void addTimer(){
    Log.e("----",Thread.currentThread().getName());
    if(timerTask == null){
        timerTask = new TimerTask() {
            @Override
            public void run() {
                timerCount++;
                Log.e("----","------=="+Thread.currentThread().getName());
                Log.e("------","------"+timerCount);
            }
        };
    }
    if(timer == null){
        timer = new Timer();
        timer.schedule(timerTask,1000,1000);
    }
}`