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()timerTasktimer非空(因为您已经在第一次单击时指定了它们)。 因此你只有一个计时器。

每次发送广播时,都会创建一个新的广播接收器实例。 每个实例都会创建它自己的timerTasktimer (因为它们是空的)。 因此,你最终会得到多个定时器。

这些计时器实际上想要达到什么目的?

链接地址: http://www.djcxy.com/p/63377.html

上一篇: Timer.schedule different in Activity and BroadcastReceiver

下一篇: Send SMS on Android