2
저는 현재 30 초마다 약간의 작업을 수행하기 위해 타이머와 타이머 작업을 사용하고 있습니다.증분 타이머
제 문제는이 작업을 수행 할 때마다 타이머의 간격 시간을 늘리고 싶다는 것입니다.
예를 들어, 타이머가 작동하는 사이에 30 초 간격으로 시작하지만 간격에 10 초를 추가하여 다음에 타이머가 작동하기 전에 40 초가 걸릴 수 있도록합니다. 여기
내 앞의 코드입니다 :
public void StartScanning() {
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
wifiManager.startScan();
scanCount++;
if(SCAN_INTERVAL_TIME <= SCAN_MAX_INTERVAL){
SCAN_INTERVAL_TIME = SCAN_INTERVAL_TIME + SCAN_INCREASE_INTERVAL;
t.schedule(scanTask, 0, SCAN_INTERVAL_TIME);
}
}
});
}};
Log.d("SCAN_INTERVAL_TIME ** ", "SCAN_INTERVAL_TIME ** = " + SCAN_INTERVAL_TIME);
t.schedule(scanTask, 0, SCAN_INTERVAL_TIME);
}
리팩토링 코드
@Override
public void StartScanning() {
t.schedule(new ScanTask(),SCAN_INTERVAL_TIME);
}
class ScanTask extends TimerTask{
@Override
public void run() {
wifiManager.startScan();
scanCount++;
if(SCAN_INTERVAL_TIME < SCAN_MAX_INTERVAL)
SCAN_INTERVAL_TIME = SCAN_INTERVAL_TIME + SCAN_INCREASE_INTERVAL;
t.schedule(new ScanTask(), SCAN_INTERVAL_TIME);
}
}
그것은 지금 작동하지만 새로운 ScanTask() 낭비마다 만들고있다? 여기
그래서 타이머가 작동 할 때마다 scanTask를 다시 생성해야합니까? –
@Donal : 위의 코드에 따르면 무거운 초기화가없고 ScanTask 클래스에 데이터 멤버가 없습니다. 따라서 30 초마다 새 인스턴스를 생성하는 오버 헤드가 최소화되어야합니다 ... 가비지 수집은 수명이 짧은 객체를 매우 효율적으로 처리합니다. –