Android Timer.schedule在活动和广播接收器中不同
我在活动中安排了两次timeatsk(单击按钮两次),如下所示: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
@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);
}
}`