6

我尝试在服务中发送短信。如果未发送短信意味着我在一段时间后重新启动服务,为此我使用计时器。如果发送的短信意味着我想停止计时器,为了停止计时器我使用计时器。取消(); 在此之前我必须检查计时器是否正在运行。如何检查它?

             int resultCode = getResultCode();
                 switch (resultCode) 
                 {
                case Activity.RESULT_OK:                 
                             timer.cancel();//Here I want to check timer running or not
                 break;

                 case SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
                     timer_run();
                 break;

                 case SmsManager.RESULT_ERROR_NO_SERVICE:     
                     timer_run();
                 break;

                 case SmsManager.RESULT_ERROR_NULL_PDU:        
                      timer_run();
                  break;

                 case SmsManager.RESULT_ERROR_RADIO_OFF:        
                     timer_run();
                  break;

                 }

定时排程功能

    public void timer_run(){        

    TimerTask hourlyTask = new TimerTask () {
        @Override
        public void run () {
             Intent myIntent = new Intent(Myservice.this,Myservice.class); 
             startService(myIntent);


        }
    };
     timer.schedule (hourlyTask, 0l, 500*5*5);
   }    
4

2 回答 2

12

如果您想要做的只是它,则无需检查计时器是否正在运行cancel()(对于 theTimer和 the都是如此TimerTask)。

该文件指出

该方法可能会被重复调用;第二次和后续调用无效。

于 2013-08-20T07:43:38.013 回答
-2

为什么你不使用 Try .... 和 printStackTrace 不会收到崩溃消息 java.lang.IllegalStateException : Timer already cancelled

只需使用:

try {
            timer.cancel();
        } catch (Exception r) {
            r.printStackTrace();
        }
于 2021-06-11T15:05:10.237 回答