私のプログラムはandroid用のappWdigetです。フィールドとして2つのタイマーがあります。
Timer usualTimer;
Timer unusualTimer;
特別な時間にだけ異常なタイマーを実行したいのですが、通常のタイマーと同時に実行したくないので、null をチェックするコードがあります。
まず、Broadcast を使用して通常のタイマーを実行し、appWidget が画面に設定されたことを検出します。
これは私の放送クラスです。
//run appWidget is set
if(usualTimer == null){
usualTimer = new Timer();
motionTimerTask mtt = new motionTimerTask();
usualTimer.schedule(mtt, 0, 10000);
}
次に、異常なタイマーを実行します。これも同じ放送クラスです。
//run when catch special Broadcast
if(usualTimer != null){
usualTimer.cancel();
usualTimer=null;
}
if(unusualTimer==null){
motionTimerTask mttU = new motionTimerTask();
usualTimer.schedule(mttU, 0, 10000);
}
今、異常なタイマーが実行され、通常のタイマーが停止します。
私の問題は、この状況では、この appWidget をリセットすると、通常のタイマーが実行を開始することです。なぜ (usualTimer == null) が true であるにもかかわらず、通常のタイマーが実行されているのかわかりません。
受信者の登録を解除するには、サービス内のコードです。これは問題ですか?
@Override
public void onDestroy(){
unregisterReceiver(receiver);
}
修正方法を教えてください。