2016-10-06 16 views
0

私は、複数のアクティビティで共有される4つのバイトのキューを必要とするアプリケーションに取り組んでいます。私はIOIO OTG上の2つのUARTと通信するため、それらを非ブロッキングにしたいので、ConcurrentLinkedQueueを使用しています。キュー内のデータは、初期化されている同じメソッド内に置くことしかできないようですが、コントロールが別のメソッドに渡されるとサイズは0になります。パブリックとして宣言して1つのアクティビティで初期化すると、 add()の後にサイズはまだ0であり、例外もなくadd()はtrueを返します。私はそれらをSingletonのApplicationオブジェクトに入れようとしましたが、結果は同じです。Androidでアクティビティ間でConcurrentLinkedQueueを共有

IOIOサービスルーパは、出力キューを読み取り、IOIOにバイトを送信し、IOIOからバイトを読み込み、入力キューに配置します。他のアクティビティは、データを出力キューに入れ、入力キューからデータを削除します。ここで

は、私が今持っているもののいくつかの単純化されたコードは次のとおりです。

public class MyApp extends Application { 
    //for UARTs 
    public static Queue<byte[]> inQueue1 = new ConcurrentLinkedQueue<byte[]>(); 
    public static Queue<byte[]> outQueue1 = new ConcurrentLinkedQueue<byte[]>(); 
    public static Queue<byte[]> inQueue2 = new ConcurrentLinkedQueue<byte[]>(); 
    public static Queue<byte[]> outQueue2 = new ConcurrentLinkedQueue<byte[]>(); 
} 

public class MainActivity extends Activity { 
    private ToggleButton toggleButton_; 
    private Button btnSend_; 
    private EditText etTxData; 
. 
. 
. 
    public void btnSendOnClick(View v){ 
     String s = etTxData.getText().toString(); //i.e. s="ABC" 
     byte b[] = s.getBytes(); // i.e. b={65, 66, 67} 
     MyApp.outQueue1.add(b); //size is 0 before and after and add() returns true 

     etTxData.setText(""); 
    } 

} 

私はいくつかの概念足りませんか?アクティビティ間で非ブロッキングキューを共有する別の方法はありますか?

+1

私の意見では動作するはずなので、同じことを(シングルトンで)試してみました。あなたの問題は他の場所にあるかもしれません。 – stefs

答えて

0

stefsが正しい - 問題は別の領域にありました。私のデバッグ方法が間違っていて、コードが正しく機能していました。私のエラーは、1つのスレッドを踏みながら、もう1つは最高速度で動作し、バイトを消費してから調べることができるということです。

関連する問題