код, который будет выполняться каждые x миллисекунд, изменяемый - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть код, который будет выполняться каждые x миллисекунд, где x может изменяться в течение жизненного цикла приложения.

Сейчас я использую функцию обработчика postDelayed, но я не могу управлять ситуациейкогда задержка меняется.

handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // do some staff

        handler.postDelayed(this, x);
    }
}, x);   

Моя проблема в том, что в других частях приложения значение x может измениться, и мне нужно выполнить код в функции run сразу после изменения,и продолжить бесконечное выполнение отложенного кода (с новым значением x).

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

как насчет создания нового класса, который имеет x в качестве статической переменной

class DelayInterval { 
    public static int x = 1000;
}

и когда вы вызываете ваш postDelay

handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // do some staff

        handler.postDelayed(this, DelayInterval.x);
    }
}, DelayInterval.x);   

и где-то в вашем коде, вы можете изменитьх

DelayInterval.x = 3000;
0 голосов
/ 04 декабря 2018

Сохраните ссылку на ваш Runnable и сохраните задержку как переменную класса следующим образом:

private Long x = 1000L;
private Runnable r = new Runnable() {
    @Override
    public void run() {
        // do some staff
        handler.postDelayed(this, x);
    }
}

затем

handler.post(r);

, чтобы запустить его.

Затем создайте установщик и получатель для x , который позаботится об изменении:

setX(Long: value){ 
    if(x != value){
        x = value
        handler.removeCallbacks(r);
        //run immediately
        handler.post(r);
    }
}

getX(){ return x };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...