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

mic*_*nyk 2 multithreading android

我写了这段代码来尝试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();
   }
Run Code Online (Sandbox Code Playgroud)

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

// 对不起我的英语不好

Jon*_*eet 6

您正在调用t.run()这意味着您正在运行UI线程中的所有代码而无需启动新线程.

您应该调用t.start()哪个将启动新线程并run在该新线程内的方法中执行代码.

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