答案:是的。
handler.postDelayed(new Runnable() {
@Override
public void run() {
tv_word.setVisibility(View.GONE);
}
},3000);
官方說法:
開啟的runnable會在這個handler所依附線程中運行,而這個handler是在UI線程中創建的,所以
自然地依附在主線程中了。
postDelayed(new Runnable()) 而沒有重新生成新的 New Thread()
小結
通常來說handler.postDelayed(new Runnable()){ }是為了刷新UI用的,handler實例化在主線程,postDelayed(new Runnable()){ }方法又依附於handler所在線程,所以就運行於主線程。即使這樣我還是不理解,new Runnable()不是新開了一個線程嗎?
原來我弄錯了,如果是implements Runnable,像extends Thread一樣,是新開了線程,但是現在只是new Runnable(){},是把Runnable對象以Message形式post到UI線程里的Looper中執行,現在真相大白了,知識點太容易混淆了。