2

我有一个类在启动时启动传感器侦听器。当触发事件时,此侦听器将最新的传感器值写入变量。该类继续执行一些逻辑,并且在某些时候,将检查此变量并根据值继续。

我的问题是,不能保证读取变量时有任何值,因为 Android 传感器侦听器仅在传感器值更改时触发事件(并且不一定在它们启动后立即触发事件)。

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

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

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

4

2 回答 2

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

        });
于 2011-12-19T14:44:45.853 回答
1

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

guard.wait(some_optional_delay_Look_into_javadoc);

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

guard.notify[All]();

(阅读文档)

您的服务侦听器将是生产者。

于 2011-12-19T14:45:32.610 回答