1

私のプログラムは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);
}

修正方法を教えてください。

4

0 に答える 0