2014-09-01 3 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

새 스레드를 시작하고 기다립니다. 시간이되면 실행 파일을 중지하고 제거하십시오. 또는 처리기를 사용하여 다른 지연된 실행 파일을 게시하여 작업 실행 파일을 중지하고 제거하십시오.

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); 
     */ 
    } 

    }