複数のアクティビティ間で共有される byte[] の 4 つのキューを必要とするアプリに取り組んでいます。ConcurrentLinkedQueue を使用しているのは、IOIO OTG で 2 つの UART と通信するため、ブロックしないようにするためです。初期化された同じメソッドのキューにデータを配置することしかできないようで、制御が別のメソッドに渡されると、サイズは 0 になります。それらを public として宣言し、1 つのアクティビティで初期化すると、他のアクティビティが可能になります。それらを参照してください。ただし、add() の後、サイズはまだ 0 であり、例外はなく、add() は true を返します。それらをシングルトン Application オブジェクトに入れようとしましたが、結果は同じです。
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("");
}
}
いくつかの概念がありませんか?アクティビティ間でノンブロッキング キューを共有する別の方法はありますか?