gpt4 book ai didi

java - 当 DatagramSocket 正在接收时,Android onTouchEvent 将不起作用

转载 作者:行者123 更新时间:2023-12-01 14:44:10 24 4
gpt4 key购买 nike

我试图允许我的用户在屏幕上移动一个 block ,同时还监听 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 吗?

Canvas

更新

我使用 AsyncTask 将运行实现为 doInBackground,它现在工作正常,没有问题,我可以使用我的应用程序并等待客户端连接,这应该工作正常,为帮助人员干杯。

Canvas

最佳答案

在 Android 中,每个 View相关方面应该在主线程,即UI线程中处理。耗时、繁重的计算或简单的阻塞任务应保留在另一个线程中,以避免用户界面被卡住。

保持用户界面流畅且响应灵敏非常重要。如果不这样做,ActivityManager最终肯定会弹出一个警告框,询问用户是否要关闭您的应用程序,因为它没有正确响应他的交互。这称为 ANR(应用程序未响应)。

您可能想阅读此very good article谈论每个应用程序应该保证的响应能力。它由 Google Android 团队编写,包含很多宝贵的建议。

关于java - 当 DatagramSocket 正在接收时,Android onTouchEvent 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15623939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com