そのため、アプリケーションには 2 つのスレッド (とりわけ) があり、1 つはオブジェクトを変更し (例では、四角形の位置を設定)、メソッドを呼び出して、2 番目のスレッドがそれをネットワーク上で送信できるようにします。
最初のスレッド:
public void run(){
while(mIsRunning){
Log.i("MovingRectThread", "Run");
mX += 10;
mRect.setPos(mX,mY);
//Send Rect
mInterface.writeData(mRect);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
2 番目のスレッド:
public void run(){
int commandSize=-1;
byte[] bufferR = new byte[ANSWER_SIZE];
int answerResult = 0;
while(mIsRunning){
Log.i("ProcessThreadGraphic", "Run");
switch(mState){
case IDLEREAD:
//****************
try {
commandSize = mmInStream.read(bufferR, 0, ANSWER_SIZE);
}
catch (IOException e) {
connectionLost();
}
// We received something
if(commandSize != -1 && bufferR[0] == 0x02){
answerResult = bufferR[2];
if(answerResult == 0){
//Authorize sending again
mState = IDLEWRITE;
}
}
//*********************
break;
case IDLEWRITE:
//Trying to send something
if(mBuffer != null ){
try {
mmOutStream.write(mBuffer);
mBuffer = null;
mState = IDLEREAD;
Thread.yield();
} catch (IOException e) {
connectionLost();
}
}
//**************
break;
default:
Log.e(TAG, "Error: state unknown");
break;
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
および mInterface.writeData のみを呼び出して終了します。
public void write(byte[]buffer){
mBuffer = buffer;
}
私の問題は、スレッドがうまく連携していないことです.1つは他の再起動の前に複数回ループしています.おそらく想像できるように、これは私のニーズに合わない.最初のスレッドでオブジェクトを1回変更し、次に2番目のスレッドが必要です.それを送信してから、オブジェクトを再度変更するだけです...
私が十分に明確であることを願っています。