2016-10-12 2 views
0

5 분마다 한 번씩 조치를 취해야하는 Android 앱에 서비스가 있습니다.Android에서 고정 속도로 작업을 시작하는 방법은 무엇입니까?

나는 달성하기 위해 TimerTask에서 Timer.scheduleAtFixedRate까지의 메소드를 실행하려고 시도했으나 속도는 전혀 고정되지 않은 것처럼 보였습니다 - 몇 시간 동안 틱이 멈춘 후 몇 시간이 지나면 타이머가 깨어나고 즉시 the reference에 따르면 ... 틱 수십 몇 일련의 발사 자사의 정상적인 동작 : 실행 (예 : 가비지 컬렉션이나 기타 백그라운드 작업 등) 어떤 이유로 지연 될 경우

, 두 개 이상의 실행 것 "따라 잡기"위해 빠르게 연속적으로 일어난다.

그래서 나는 다른 해결책을 찾아야했습니다.

다음 나는 ScheduledExecutorService을 시도하고 그것은 scheduleAtFixedRate executes fast에서 대답 다음, scheduleAtFixedRate 방법입니다. 또한이 문제를 완전히 해결하지 못합니다. 짧은 시간 (최대 1 시간)이지만 똑같은 현상이 관찰됩니다.

내 현재 코드는 간단하다 : 그래서

scheduler = Executors.newSingleThreadScheduledExecutor(); 
    scheduler.scheduleAtFixedRate(new Runnable() { 
      @Override 
      public void run() { 
       Log.d(LOG_TAG, "Schedule run"); 

       mHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         Log.d(LOG_TAG, "Call timer"); 

         serviceHelper.doAction(); 

         Log.d(LOG_TAG, "Task complete"); 
        } 
       }); 
      } 
     }, 0, AppConstant.NOTIFY_INTERVAL, TimeUnit.MILLISECONDS); 

, 나는 일정 (+ -3 분의 간격 허용에 안정성을 추가하는 방법을 조언이 필요하지만, 10 ~ 30 분은 너무 방법입니다 많은).

답변

1

5 분마다 한 번씩 조치를 취해야하는 Android 앱에 서비스가 있습니다. 이를 위해 내가 ScheduledExecutorService를

을 시도했습니다 TimerTask를 [...] 다음을 실행하려고했습니다 내가 AlarmManager 훨씬 더 나은 선택을 고려 거라고 당신이 작업에 대한 잘못된 도구를 사용하는 것 같아요. docs의 Scheduling Repeating Alarms을보고 API 19에 소개 된 정확한 경보와 부정확 한 경보의 차이점을 이해해야합니다 (확실히 후자를 원하지 않으므로).

관련 문제