我知道從另一個線程更新UI是被禁止的,所以我試着看看我會從應用程序中得到什麼結果。是的,更新UI組件時應用程序會崩潰,但有一種情況我不明白,應用程序運行良好。從另一個線程更新UI
1)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.textView1);
bt = (Button)findViewById(R.id.button1);
new Thread(){ //1
public void run() {
tv.setText("changed");
}}.start(); //1 }
}
2)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.textView1);
bt = (Button)findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
new Thread(){ //1
public void run() {
tv.setText("changed");
}}.start(); //1 }
}
});
}
對不起,我以前我的問題的描述,我想大多數人誤解,所以我改一下這個問題。上面有兩種情況,他們應該給我崩潰的錯誤,因爲都創建新的線程和更新UI組件,但實際上,只有第二種情況下崩潰,但fisrt方案不會崩潰。任何人都知道原因?
runOnUiThread或在UI線程中創建處理程序(例如,將其作爲字段或最終處理程序作爲本地變量),然後使用handler.post。 Runnable將是這些函數的參數,裏面的代碼就是你想在UI線程中做什麼 – 2012-04-24 02:00:09
嗨,謝謝你的回覆。我還不是很清楚你的意思。該功能是否存在於adroid中,或者存在於J2SE中?通常我可以在J2SE中使用這種方式創建新線程,對嗎? – 2012-04-24 02:38:28
我改變了這個問題,可能會更容易理解。 – 2012-04-24 03:37:05