简体   繁体   English

带回调的定时器

[英]Timer with callback

Info 信息

  • I have a class SensorClass that manages some sensors. 我有一个SensorClass类来管理一些传感器。
  • I have an interface with method A(). 我有一个方法A()的接口。
  • I have a tester class TestClass that implements the interface with method A() and passes this implementation to SensorClass. 我有一个测试器类TestClass,它使用方法A()实现接口,并将此实现传递给SensorClass。 TestClass extends Activity. TestClass扩展了Activity。

Objective 目的

  • Every X seconds I need to call the implemented method of the interface stored in SensorClass. 每隔X秒我需要调用存储在SensorClass中的接口的实现方法。 It's a callback. 这是一个回调。
  • I don't know how is implemented method A(), so it can modify views of its activy. 我不知道如何实现方法A(),因此它可以修改其活动的视图。
  • I need a Timer because I want to start the callback -executing method A() from the stored interface in SensorClass- every X seconds. 我需要一个Timer,因为我想每隔X秒从SensorClass中存储的接口启动回调执行方法A()。 Thus, I do the following: 因此,我做了以下事情:
public void do (){
 timer.scheduleAtFixedRate (new TimerTask (){
  public void run (){
   storedInterface.A ();
  }
 }, 0, speed);
}
  • But as I said I don't know how is implemented A(). 但正如我所说,我不知道如何实现A()。 I have to run the method within runOnUIThread() because it can modify views. 我必须在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);
}
  • Problem: SensorClass is not an Activity, so runOnUIThread() will cause an error. 问题:SensorClass不是Activity,因此runOnUIThread()将导致错误。

Posible workaround 可行的解决方法

Extend SensorClass from an Activity but SensorClass is not an Activity with methods onCreate(), onPause(), etc!!! 从一个Activity扩展SensorClass但是SensorClass不是一个带有onCreate(),onPause()等方法的Activity! I don't like this solution. 我不喜欢这个解决方案。


My question is: How can I call runOnUIThread() within a class that only recieves a context from an Activity? 我的问题是:如何在只接收来自Activity的上下文的类中调用runOnUIThread()? Or... Is there any other solution for my problem? 或者......我的问题还有其他解决办法吗?

Thanks. 谢谢。

Solved using handler. 解决了使用处理程序。 Great tool! 很棒的工具!

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM