2014-09-01 11 views
0

我有一個intentService啓動一個處理程序,但經過一段時間後,我需要停止處理程序。我不知道如何做到這一點。我有下面的課程,但我不知道如何在達到時間或者某個小時/分鐘過後停止處理程序。我希望這可以儘可能高效。Android:在一個意圖服務的某個時間停止處理程序

public class RedirectService extends IntentService { 

    private Handler handler; 
    private Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      foobar(); 
      handler.postDelayed(this, 2000); 
     } 
    }; 

    public LockedRedirectService() { 
     super("RedirectService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent redirectIntent) { 
     // Gets data from the incoming Intent 
     int hour = redirectIntent.getIntExtra("hour", 0); 
     int min = redirectIntent.getIntExtra("minute", 0); 



     handler.postDelayed(runnable, 2000); 
     handler.removeCallbacks(runnable); 
    } 
} 

回答

1

開始一個新的線程並等待。當時間到了,停止並移除可運行的程序。 或者使用處理程序發佈另一個延遲的runnable來停止並刪除正在運行的可運行程序。

public class RedirectService extends IntentService { 

    private Handler handler; 
    private boolean mRun = false; 
    private Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      if (mRun) { 
       foobar(); 
       handler.postDelayed(this, 2000); 
      } 
     } 
    }; 

    public LockedRedirectService() { 
     super("RedirectService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent redirectIntent) { 
     // Gets data from the incoming Intent 
     final int hour = redirectIntent.getIntExtra("hour", 0); 
     final int min = redirectIntent.getIntExtra("minute", 0); 


     mRun = true; 
     handler.postDelayed(runnable, 2000); 
     //handler.removeCallbacks(runnable); 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       Thread.currentThread(); 
       try { 
        Thread.sleep((hour * 60 + min) * 60 * 1000); 
       } catch (Exception ignore) {} 
       mRun = false; 
       handler.removeCallbacks(runnable); 
      } 
     }).start(); 

     /* or use handler 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       mRun = false; 
       handler.removeCallbacks(runnable); 
      } 
     }, (hour * 60 + min) * 60 * 1000); 
     */ 
    } 

    }