2017-05-31 9 views
0

このように、(2回ボタンをクリックしてください):私が活動中で二回timeatskをスケジュール活動におけるさまざまTimer.scheduleとBroadcastReceiver

the right result

が、私はschedue:

@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の同じタスク(ボタンを2回クリック): 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; 
    } 
} 

in broadcastReceiver: ' @Override 公開されていませんonReceive(コンテキストコンテキスト、意図インテント){ 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

では、(あなたが唯一のあなたの活動のインスタンスので、あなたがaddTimer()を呼び出す二時間、timerTasktimerが非nullであるということですので、最初のクリックですでに割り当てられています)。したがって、あなたは1つのタイマーしか持っていません。

ブロードキャストを送信するたびに、新しいブロードキャストレシーバインスタンスが作成されます。各インスタンスは自分自身のtimerTasktimer(nullであるため)を作成します。したがって、複数のタイマーで終了します。

これらのタイマーで実際に何を達成しようとしていますか?

+0

私はビデオを再生する秒数をカウントするためにタイマを使用します。ビデオは停止し、何度も開始されるので、複数のブロードキャストを送信する必要があります。問題はどのように解決できますか? – shumengma

+0

その後、サービスに秒を送信し、サービスでタイマーを開始しないでください。なぜタイマーが必要ですか?開始日時を 'Date'変数に記録し、停止したときにビデオが再生された秒数を計算するのはなぜでしょうか。 – gjsalot

+0

ありがとうございます、シングルマスクは仕事です – shumengma

関連する問題