私は、複数のアクティビティで共有される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("");
}
}
私はいくつかの概念足りませんか?アクティビティ間で非ブロッキングキューを共有する別の方法はありますか?
私の意見では動作するはずなので、同じことを(シングルトンで)試してみました。あなたの問題は他の場所にあるかもしれません。 – stefs