2016-02-23 5 views
0

Когда вы используете функцию postDelayed для обработчика, для указания времени, после которого выполняется обработчик, требуется переменная delayMillis. Я хочу, чтобы мой обработчик повторялся бесконечно, поэтому я вложил две функции postDelayed.Программно сократить интервал времени в обработчике. Android

final int initialdt = 1000; 
    final Handler handler = new Handler(); 
    final Runnable r = new Runnable() { 

     public void run() { 

      handler.postDelayed(this, initialdt); 
     } 
    }; 
    handler.postDelayed(r, initialdt); 

Однако, используя этот метод, время между вызовами run() фиксировано. Поскольку для внутреннего postDelayed требуется значение final в качестве параметра. Я хочу сократить время между последовательными вызовами. Есть ли способ сделать это?

ответ

3

Это должно делать то, что вы хотите.

final int initialDt = 1000; 
    final Handler handler = new Handler(); 
    final Runnable r = new Runnable() { 
     int dt = initialDt; 
     public void run() { 
      dt -= 100; 
      if (dt >= 0) { 
       handler.postDelayed(this, dt); 
      } 
     } 
    }; 
    handler.postDelayed(r, initialDt); 
+0

Спасибо. Я попытался объявить dt внутри ** run ** и outiside runnable, но мне не приходило в голову попробовать внутри runnable и вне run. – Kafros

+0

Добро пожаловать. Если вы довольны этим решением, мне бы очень хотелось, чтобы вы назначили мне правильный контрольный знак ответа. Благодаря! : D –

0

Вы можете установить ограничение внутри postDelayed

final Handler handler = new Handler(); 

     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 

       handler.postDelayed(this, limit); 
      } 
     }, 1000);