2017-05-24 12 views
0

私はいくつかの携帯センサーを使ってアンドロイドアプリを作ろうとしています。私はこのようなものを考えていた。Javaおよび/またはAndroidのイベントは同時に発生しますか?

public class ListenerSensores implements SensorEventListener { 

    LinkedBlockingQueue<float[]> acelerations = new LinkedBlockingQueue(); 

    public void onSensorChanged (SensorEvent event) { 
     //Add event values to the data structure 
    } 

    private ArrayList<float[]> obtainLastXValues(LinkedBlockingQueue<float[]> queue, int amount) { 

    ArrayList<float[]> values = new ArrayList<float[]>(); 

    for (int i = 0; i < amount; ++i) { 
     while(queue.isEmpty()){ 
     //wait 
     } 

     float data[] = new float[4]; 
     data = queue.poll(); 
     float thing[] = {data[0], data[1], data[2], data[3]}; 
     values.add(thing); 
    } 

    return values; 
    } 

LinkedBlockingQueueまたはLinkedListのような簡単なものを使用する必要がありますか?

答えて

1

1)JavaイベントとAndroidイベントは同時に発生しますか?

答えは - 特定のAPIがどのように設計されたかによって異なりますが、Javaおよび/またはAndroidでは設計されていません。だから、それぞれの場合には、それが呼び出されたスレッドを見つけることが必要です。しかし、後者のほうが便利でスケーラブルなので、ほとんどの場合、メインスレッドにすぎません。必要に応じて、自分のスレッドで任意のコールバックを処理できます。

2)SensorEventListenerは、デフォルトでUIスレッドで実行されます。しかし、あなたはHandlerを渡して、Looperを使って処理をいくつかのスレッドに移すことができます。

0

このSensorEventListener in separate threadによると、デフォルトではUIスレッドで実行されますが、sensorManager.registerListener()の最後のパラメータとしてハンドラを使用して変更できます。

関連する問題