一种等待传感器数据的方法

时间:2011-12-19 14:38:10

标签: android wait android-sensors android-event

我有一个类,它在启动时启动传感器监听器。当触发事件时,此侦听器将最新的传感器值写入变量。该类继续做一些逻辑,在某些时候,将检查此变量并继续,具体取决于值。

我的问题是,在读取变量时无法保证存在任何值,因为Android传感器侦听器仅在传感器值更改时触发事件(并且一旦启动就不一定触发事件)

因此,我需要我的应用程序等待一个事件触发,以便它有数据可以解决(最好是超时,以确保它不会无限期地等待)。

我的问题是,实施此等待的最佳方式是什么?我应该有一个处理程序,在继续之前检查每个X毫秒的值吗?我是否应该在侦听器和处理程序之间传递某种消息,以便在数据写入时告诉它,并且它现在可以恢复?还有其他更好的选择吗?

编辑:我应该指出,类逻辑是在UI线程上执行的。

2 个答案:

答案 0 :(得分:1)

我正在使用Handler完全相同的情况。

Handler handler = new Handler();
handler.post(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
                    x1.setText(String.valueOf(sensors.getValueAccX()));
        Log.d("Sensors", String.valueOf(sensors.getValueAccZ()));//using persoanl methods that are not shown here
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (Exception e) {
                    Toast.makeText(ClientSideActivity.this,
                            "Server is not running", Toast.LENGTH_LONG).show();
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                // TODO Auto-generated method stub

                handler.postDelayed(this, 100);
            }

        });

答案 1 :(得分:1)

这与android没有严格的关系,也是一般的java问题。实现它的机制是java.lang.Oject中的容器。假设您有一些保护对象,生产者和消费者线程可以访问。在消费者主题上,您可以致电:

guard.wait(some_optional_delay_Look_into_javadoc);

然后,cosumer线程将等到超时发生或地狱冻结或生产者线程问题:

guard.notify[All]();

(阅读文件)

您的服务监听器将是制作人。