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 분은 너무 방법입니다 많은).