現在Android4.1.1のタブレットを使用して、外部機器とRS232で通信・制御するアプリを作成しています.
シリアルポートはFTDriverを使用させていただいて制御しています.
通信のプログラムなどを作成しテスト動作させていると、たまにOS自体がフリーズしてしまう現象に遭遇してしまいました.
アプリの背景色のみになり(ButtonやTextViewが全て表示されなくなる)、ホームボタンなどをタップしても動作せず、OSを再起動するしかない状況になります.
自作のアプリを起動していない状態では上記のような現象は発生しません.
Logcatでモニタリングしていますが、運が悪く、フリーズ発生時に限ってADBの接続を切断していたため、エラーの発生の有無などは確認できていません.
データ受信時の割り込み処理が衝突してフリーズしているのかと思いましたが、知識がなく判断しかねる状況です.
以下に、受信時の処理を記載します.
問題の解決について何かご助言があれば、何卒宜しく御願い致します.
//activityの先頭部に記載
public short d_c;
//受信データの処理
Runnable mLoop = new Runnable() {
@Override
public void run() {
int len;
byte[] rbuf = new byte[4096];
int[] is = new int[256];
for (;;) {
len = mSerial.read(rbuf);//受信データ数の取得
rbuf[len] = 0;
//受信データ数が0でないなら処理実施
if (len > 0) {
for (int i=0; i < len ;i++){
//受信データをバッファにコピー
is[d_c] = rbuf[i];
// \r 受信でコマンド解析処理開始
if(is[d_c] == 13){
//受信データによる処理実行
}
}
mHandler.post(new Runnable() {
public void run() {
//この部分でGUIを操作
}
});
}
}
}