我在活动中安排了两次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;
}
}
广播收发器中的:` @覆盖 public void onReceive(Context context,Intent intent){ addTimer(); }
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);
}
}`
但结果是 in two thread!
答案 0 :(得分:0)
正在发生的事情是,您只有一个活动实例,因此第二次调用addTimer()
时,timerTask
和timer
非空(因为您已经分配了它们)在第一次点击)。因此,您只有一个计时器。
每次发送广播时,都会创建一个新的广播接收器实例。每个实例都会创建自己的timerTask
和timer
(因为它们为空)。因此,您最终会得到多个计时器。
你真的想用这些计时器实现什么目标?