2014-09-01 75 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); 
     */ 
    } 

    }