J'utilise actuellement un minuteur et une minuterie pour effectuer un travail toutes les 30 secondes.Minuteur incrémental
Mon problème est qu'après chaque fois que je fais ce travail, je veux incrémenter l'intervalle de temps de la minuterie. Donc, par exemple, il commence avec 30 secondes entre le tir de la minuterie, mais je veux ajouter 10 secondes à l'intervalle, de sorte que la prochaine fois que le chronomètre prend 40 secondes avant qu'il se déclenche.
Voici mon code précédent:
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);
}
refactorisé CODE
@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);
}
}
Il fonctionne maintenant, mais crée une nouvelle ScanTask() chaque fois que le gaspillage?
Donc, je devrais recréer scanTask chaque fois que le Timer se déclenche? –
@Donal: Selon le code ci-dessus, vous n'avez aucune initialisation lourde et aucun membre de données dans la classe ScanTask. Par conséquent, le temps de création d'une nouvelle instance toutes les 30 secondes devrait être minime ... La collecte des ordures traite les objets de courte durée très efficacement. –