Activity和BroadcastReceiver中的Timer.schedule不同
我在活动中安排了两次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中调度了两次相同的任务(单击按钮两次):inActivity:
@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;
}
}
在broadcastReceiver中:@Override 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);
}
}`
但结果是在两个线程!
发生的事情是,您只有一个Activity实例,因此第二次调用addTimer()
, timerTask
和timer
非空(因为您已经在第一次单击时指定了它们)。 因此你只有一个计时器。
每次发送广播时,都会创建一个新的广播接收器实例。 每个实例都会创建它自己的timerTask
和timer
(因为它们是空的)。 因此,你最终会得到多个定时器。
这些计时器实际上想要达到什么目的?
链接地址: http://www.djcxy.com/p/63377.html上一篇: Timer.schedule different in Activity and BroadcastReceiver
下一篇: Send SMS on Android