2010-12-11 10 views
2

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)すべて正常に動作します。 どうしたの?

//私の英語

+0

あなたは@Jonで説明されているように間違った方法を呼んでいることを確認するために5秒間グーグルをすることができます – Falmarri

答えて

6

申し訳ありませんあなたは新しいスレッドを起動せずにUIスレッドですべてのコードを実行していることを意味するt.run()を呼んでいます。

t.start()を呼び出すと、代わりに新しいスレッドが開始され、その新しいスレッド内のrunメソッドでコードが実行されます。

(私もそれがここで動作を変更しません。ただ関心事の分離の問題として、Runnableを実装し、新しいThreadコンストラクタにRunnableを渡すのではなくrunをオーバーライドお勧めしますが、それはきれいな方法ですそれについて考えるのIMO。)

関連する問題