0

加速度センサーの 1 つで高解像度を必要とするアプリを構築していますが、他のセンサーからのデータはまったくありません。そのため、イベントを聞いているときは、次のことを行っています。

 mSensorManager.registerListener(this, mAccelerometer,
      SensorManager.SENSOR_DELAY_FASTEST);

問題は、センサーが変更されるたびにイベントが発生し、チェックを実行することです。多くの CPU 時間が無駄になり、より良いことに使用できます。

この CPU 時間を節約する方法はありますか?

4

4 に答える 4

1

1 つのセンサーをリッスンするだけで済みます。

    sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
    accSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensorManager.registerListener(this, accSensor, SensorManager.SENSOR_DELAY_GAME);

パフォーマンスに関しては、私の経験では、最速でもパフォーマンスに大きな影響はありませんが、覚えておくべきいくつかの薄い点があります。到着した値は、すぐに別のスレッドにダンプして処理する必要があります。センサー スレッドですべての処理を行うと、将来のサンプルのパフォーマンスや配信時間に影響を与える可能性があります。

SensorData から値をコピーし、values 配列への参照を保持しないでください。これらは、後で再利用される可能性のある固定プールの一部であり、コードの下から変更したくない場合があります。

SENSOR_DELAY_FASTEST は、精度を気にする場合は一般的に適していません。速度は、ぎくしゃくしたデータを持つという代償を伴います。センサー データを最速で lof にダンプし、デバイスを安定した平らな面に置きます。SENSOR_DELAY_GAME を使用すると、レポートするものが何もないためサンプルの速度が低下しますが、それは正しいことですが、レポートする変更がたくさんあると考えているため、まだ大量のサンプルをダンプします。モトローラはこれとは別の話です。なぜなら、彼らは重複したサンプルを積極的に取り締まり、デバイスを平らな面に設置すると、報告されたサンプルの数が 0 になるからです。

于 2012-10-13T05:08:36.563 に答える
1

API 3 以降、単一のセンサーに登録できます。以下のアプローチを使用します。

    try {
        sensorMgr = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);

        sensors = sensorMgr.getSensorList(Sensor.TYPE_ACCELEROMETER);
        if (sensors.size() > 0) sensorGrav = sensors.get(0);

        sensorMgr.registerListener(this, sensorGrav, SensorManager.SENSOR_DELAY_FASTEST);

    } catch (Exception ex1) {
        try {
            if (sensorMgr != null) {
                sensorMgr.unregisterListener(this, sensorGrav);
                sensorMgr = null;
            }
        } catch (Exception ex2) {
            ex2.printStackTrace();
        }
    }

リスナーは、加速度センサーの変化に対してのみ呼び出されます。

幸運を。

于 2012-10-11T14:54:37.277 に答える
1

別のフラグを試してください:

SENSOR_DELAY_FASTEST    //get sensor data as fast as possible
SENSOR_DELAY_GAME       //rate suitable for games
SENSOR_DELAY_NORMAL     //rate (default) suitable for screen orientation changes
SENSOR_DELAY_UI         //rate suitable for the user interface
于 2012-09-27T08:25:45.163 に答える