ServerSocket的服务 - 它应该在一个单独的线程中吗?

时间:2012-01-20 09:35:44

标签: android sockets

我正在编写一个使用sockets的简单应用程序。我有一个按钮按下后启动服务的活动;简而言之,此服务中的onStart执行以下操作:

ss=new ServerSocket(portNum);
Socket socket=ss.accept();
//some other unrelated stuff

我虽然服务可以在后台独立于活动中运行(我是Android的新手,事实上,这是我的第一个应用程序),但我的活动冻结直到ss.accept()完成(我的意思是,直到客户端连接 - 按钮保持按下状态,我无法做任何事情)。这种行为是正常的还是我应该在我的代码中找到某个错误?或者也许把这段代码放在一个单独的线程中?

1 个答案:

答案 0 :(得分:2)

默认情况下,在Android本地服务中使用相同的UI线程。这就是你的活动冻结的原因。您应该创建服务,在此服务中创建一个线程并在另一个线程中运行您的命令。