我有这个代码,只需点击一个按钮,服务就会从一个新线程启动,服务将启动我的TCP客户端。
TCP客户端连接后将发送倒计时事件以通知片段继续工作。
代码看起来像这样
connectButton = (Button) view.findViewById(R.id.connectBT);
connectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// ***** IntentService Way ****** //
Intent intent = new Intent(getActivity(), NetworkService.class);
getActivity().startService(intent);
// Once client is connected, give the server some info about client
mCountDown.await(3000, TimeUnit.MILLISECONDS);
String json = jsonMaker.toJson(new DeviceInfo());
DispatchToServer(json);
} catch (Exception ie) {
ie.getMessage();
}
}
}).run();
但是当我点击连接时,我的UI仍然因某种原因冻结,即使我正在等待不同的线程然后是UI线程。当我使用AsyncTask代替服务时,相同的代码工作正常。
答案 0 :(得分:4)
你写过
new Thread(new Runnable() {...}).run();
Thread#run
只是Thread
类Runnable
接口的实现。它所做的就是委托你传递给构造函数的run
Runnable
方法。
Java线程以start
方法启动:
new Thread(new Runnable() {...}).start();
答案 1 :(得分:3)
尝试调用thread.start()而不是thread.run()
答案 2 :(得分:3)
使用Thread.start()代替Thread.run()