1

我有这个线程:

private class MyThread extends Thread{
    public void run(){
        try {
            sleep(10000);
            Utils.stopTimer();
        } catch (InterruptedException e) {
            Log.d(TAG, "interrupted");
        }
    }
}

然后我开始了线程。但是线程阻塞了主 UI 线程,导致它不响应用户交互。

4

3 回答 3

8

呼叫myThread.start()而不是myThread.run()

执行后者不会导致代码在不同的线程中执行,而只是调用当前run(例如 UI)线程上的方法- 就像任何其他正常的方法调用一样。


链接文档的摘录:

start使该线程开始执行;Java 虚拟机调用run方法 [在启动的线程中] ..

于 2013-03-06T06:27:38.757 回答
4

您需要调用 thread.start() 来启动一个线程,当您调用该 run() 方法时将自动执行。

  Calling this thread will also blocks the UI thread, you need to call it Async Task or in runonuithread.
于 2013-03-06T06:31:49.457 回答
1

最好使用AsyncTaskActivity.RunOnUIThread执行这种类型的代码。

于 2013-03-06T06:36:20.860 回答