带回调的定时器

时间:2010-11-17 19:38:44

标签: android multithreading timer

信息

  • 我有一个管理传感器的SensorClass类。
  • 我有一个方法A()的接口。
  • 我有一个测试器类TestClass,它使用方法A()实现接口,并将此实现传递给SensorClass。 TestClass扩展了Activity。

目标

  • 每隔X秒我需要调用存储在SensorClass中的接口的实现方法。这是一个回调。
  • 我不知道如何实现方法A(),因此它可以修改其活动的视图。
  • 我需要一个Timer,因为我想每隔X秒从SensorClass中存储的接口启动回调执行方法A()。因此,我做了以下几点:
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不是Activity,因此runOnUIThread()会导致错误。

可行的解决方法

从Activity扩展SensorClass但是SensorClass不是具有onCreate(),onPause()等方法的Activity!我不喜欢这个解决方案。


我的问题是:如何在只接收来自Activity的上下文的类中调用runOnUIThread()?或者......我的问题还有其他解决办法吗?

感谢。

1 个答案:

答案 0 :(得分:8)

使用处理程序解决。伟大的工具!

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);
}