UI线程即使我在另一个上工作也会卡住

时间:2014-06-28 09:26:46

标签: java android multithreading ui-thread countdownlatch

我有这个代码,只需点击一个按钮,服务就会从一个新线程启动,服务将启动我的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代替服务时,相同的代码工作正常。

3 个答案:

答案 0 :(得分:4)

你写过

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

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

Java线程以start方法启动:

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

使用Thread.start()代替Thread.run()