2010-11-17 6 views
3

информацияТаймер с обратным вызовом

  • У меня есть класс, который управляет SensorClass некоторых датчиков.
  • У меня есть интерфейс с методом A().
  • У меня есть класс тестера TestClass, который реализует интерфейс с помощью метода A() и передает эту реализацию в SensorClass. TestClass расширяет активность.

Объективные

  • Каждый Х секунд нужно вызвать реализованный метод интерфейса, хранящегося в SensorClass. Это обратный вызов.
  • Я не знаю, как реализован метод A(), чтобы он мог изменять виды своей активности.
  • Мне нужен таймер, потому что я хочу запустить метод callback -executing A() из хранимого интерфейса в SensorClass - каждые X секунд. Таким образом, я делаю следующее:
 
public void do(){ 
timer.scheduleAtFixedRate (new TimerTask(){ 
    public void run(){ 
    storedInterface.A(); 
    } 
}, 0, speed); 
} 
  • Но, как я сказал, что я не знаю, как реализуется A(). Я должен запустить метод в runOnUIThread(), потому что он может изменять представления.
 
private void startCallback(){ 
runOnUiThread (new Runnable(){ 
    public void run(){ 
    storedInterface.A(); 
    } 
}); 
} 

public void do(){ 
timer.scheduleAtFixedRate (new TimerTask(){ 
    public void run(){ 
    startCallback(); 
    } 
}, 0, speed); 
} 
  • Проблема: SensorClass не является активность, так runOnUIThread() приведет к ошибке.

Возможное обходной

Продлить SensorClass от активности, но SensorClass не является активность с помощью методов OnCreate(), OnPause(), и т.д !!! Мне не нравится это решение.


Мой вопрос: Как я могу вызвать runOnUIThread() в классе, который получает только контекст из Activity? Или ... Есть ли другое решение для моей проблемы?

Спасибо.

ответ

7

Решено использовать обработчик. Отличный инструмент!

 
public void do(){ 
    final Handler handler = new Handler(); 
    timer.scheduleAtFixedRate (new TimerTask(){ 
     public void run(){ 
      handler.post (new Runnable(){ 
       public void run(){ 
        storedInterface.A(); 
       } 
      }); 
     } 
    }, 0, speed); 
} 
+0

+ 1, + 1, отличный вопрос, отличный ответ –

Смежные вопросы