2013-09-26 13 views
3

今天,當我與隨機things.My碼打顯示波紋管一些奇怪的事情發生,奇怪!!,TextView的值從後臺線程更新

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final TextView textView = (TextView) findViewById(R.id.txtName); 
     new Thread() { 

      @Override 
      public void run() { 
       for(int i=0; i<100; i++){ 
        textView.setText("Hello I am fine" +i); 
        textView.setTextColor(Color.RED); 
//     Toast.makeText(getApplicationContext(), "Hello I am fine", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }.start(); 
     ((TextView) findViewById(R.id.txtName)).setText("Hello"); 

    } 

此代碼工作正常,但在技術上它不該沒有工作。 因爲我們無法從線程更新UI,所以我不明白爲什麼這段代碼正在工作。請告訴我爲什麼這個代碼工作。

但是,當我驢吐司線程開始崩潰,所以我的問題是爲什麼從線程更新textview工作。

謝謝

+0

您應該檢查在Android OS高於3.0 –

+0

我試圖在每一個版本,但對工作,但在技術上它不應該工作 –

回答

0

您不能從後臺線程更新ui。使用runOnUIThread

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
    textView.setText("Hello I am fine" +i); 
    textView.setTextColor(Color.RED); 
    } 
    }); 

從文檔

每個應用程序都運行UI作爲查看對象的對象,這樣它自己的特殊螺紋報價;這個線程被稱爲UI線程。只有在UI線程上運行的對象才能訪問該線程上的其他對象。

+0

但是這個代碼工作這就是問題,但它不應該工作 –

+0

@NixitPatel你應該得到一個異常,你的線程開始。你爲什麼在啓動後有'((TextView)findViewById(R.id.txtName))。setText(「Hello」)? – Raghunandan

+0

是的,它是開始,但沒有例外 –