为什么这个线程不起作用?

时间:2010-12-11 08:58:33

标签: android multithreading

我编写了这段代码来尝试Android上的线程,但它不起作用。

   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Thread t = new Thread() {
            @Override public void run() {
                            int i = 0;
                while(true) {
                                 i += 5;
                                 if(i == 1000000)
                                       break;
                            }
            }
        };
    t.run();
   }

我有一些GUI,当线程工作时(i <1000000),GUI冻结。但是当线程完成时(i == 1000000)一切正常。 怎么了?

//对不起我的英文

1 个答案:

答案 0 :(得分:6)

您正在调用t.run(),这意味着您在不启动新线程的情况下运行UI线程中的所有代码。

你应该调用t.start()而不是启动一个新线程并在新线程中的run方法中执行代码。

(我还建议实施Runnable然后将Runnable传递给新的Thread构造函数而不是覆盖run,这只是关注点的分离问题它不会改变这里的行为,但它是一种更清晰的思考IMO的方式。)