程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> ui-關於android子線程操作UI的問題

ui-關於android子線程操作UI的問題

編輯:編程綜合問答
關於android子線程操作UI的問題

看到的所有的資料上都說android的子線程不能操作UI,抱著好奇心我寫了下面的程序,竟然運行成功了,不知誰能解釋一下這個問題
public class MainActivity extends Activity {
Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.bt);

    new Thread(new Runnable() {
        public void run() {
            bt.setText("haha"); 
        }
    }).start();
}

}

最佳回答:


android的子線程不能操作UI,資料上是不建議吧,不是說不能。
在onCreate中情況比較特殊,而且你這直接new Thread,中間沒有時間停頓和延時。
首先不能更新的原理關鍵在於ViewRoot中的checkThread方法執行在線程更新UI前還是更新後執行的問題。
這裡啟動線程的時候ViewRoot還沒有。ViewRoot在執行onResume期間會有。
如果你在線程中

 new Thread(new Runnable() {
        public void run() {
                    try {
                    Thread.sleep(2000);//這裡停2秒就是另一個結果了
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            bt.setText("haha"); 
        }
    }).start();
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved