0

我有这段代码,点击一个按钮,一个服务将从一个新线程启动,该服务将启动我的 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 而不是服务时,相同的代码工作正常。

4

3 回答 3

4

你写

new Thread(new Runnable() {...}).run();

Thread#run只是Thread类的Runnable接口实现。它所做的只是委托给你传递给构造函数的run方法。Runnable

Java 线程使用以下start方法启动:

new Thread(new Runnable() {...}).start();
于 2014-06-28T09:33:07.383 回答
3

尝试调用 thread.start() 而不是 thread.run()

于 2014-06-28T09:31:59.833 回答
3

使用 Thread.start() 而不是 Thread.run()

于 2014-06-28T09:32:02.940 回答