DatagramSocketで接続されていることをリッスンしながら、ユーザーが画面上でブロックを移動できるようにしようとしています。これが私のonTouchEventです。
public boolean onTouchEvent( MotionEvent event )
{
if ( event.getAction() == MotionEvent.ACTION_DOWN )
{
if( event.getY() > getHeight() - 50 )
{
gameState.setRunning( false );
((Activity)getContext()).finish();
}
else
{
touched = true;
Log.d(TAG, "Coords: x=" + event.getX() + ",y=" + event.getY());
}
checkCollisions( event.getX(), event.getY() );
}
if ( event.getAction() == MotionEvent.ACTION_MOVE )
{
checkCollisions( event.getX(), event.getY() );
}
if ( event.getAction() == MotionEvent.ACTION_UP )
{
touched = false;
}
return true;
}
そしてこれが私のサーバーコードです
public void run()
{
Log.d(TAG, "Ip address used:" + getLocalIPAddress() );
while( true )
{
//Receive some data
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket( buf, buf.length );
try
{
socket.receive( packet );
}
catch (IOException e)
{
Log.d(TAG, "Error with receiving data");
e.printStackTrace();
}
String data = new String( buf, 0, packet.getLength() );
Log.d(TAG, "Data received was :" + data);
}
}
これでサーバーは正常に動作しますが、サーバーが接続を待機している間、クライアントは何もできません。スレッドを開始できることはわかっていますが、それでもonTouchEventがブロックされませんか?
キャンバス
アップデート
AsyncTaskを使用してdoInBackgroundとして実行を実装しましたが、問題なく正常に動作するようになりました。アプリケーションで遊んだり、クライアントが接続するのを待つこともできます。これは正常に動作するはずです。
キャンバス