3

私はこのコードを使用して、1 時間ごとに (この例では 1 秒ごとに) 電子メール レポートを送信しようとしています。カバレッジがない場合は、1 時間以内などに再試行してください。何とか sendUnsendedReports() のタイマーを壊すことができました。1 回だけ起動します。sendUnsendedReports() の呼び出しを削除すると、タイマーは完全に機能します。周囲に try-catch ブロックがあっても、タイマーは 1 回しか起動しません。ご意見をお聞かせください。

private void createAndScheduleSendReport() {
        delayedSendTimer = new Timer();
        delayedSendTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                Log.w("UrenRegistratie", "Try to send e-mail...");
                try{
                  sendUnsendedReports();
                }
                catch(Exception e){
                    // added try catch block to be sure of uninterupted execution
                }
                Log.w("UrenRegistratie", "Mail scheduler goes to sleep.");
            }
        }, 0, 1000);
    }
4

3 に答える 3

4

タイマーが正常に動作しない場合があるようです。これの代替手段は、Handler代わりにの使用ですTimerTask

次のように使用できます。

private Handler handler = new Handler();
handler.postDelayed(runnable, 1000);

private Runnable runnable = new Runnable() {
   @Override
   public void run() {
      try{
              sendUnsendedReports();
            }
            catch(Exception e){
                // added try catch block to be sure of uninterupted execution
            }
      /* and here comes the "trick" */
      handler.postDelayed(this, 1000);
   }
};

詳細については、このリンクを確認してください。:)

于 2013-01-03T19:03:16.110 に答える