Android在非UI執行緒中更新UI的方法

2021-09-07 10:58:26 字數 678 閱讀 2949

在ui thread中建立handler。用sendmessage(message)或者obtainmessage(result, obj).sendtotarget()在handlemessage方法中更新ui。

推薦使用obtainmessage(result, obj).sendtotarget()。由於這種方法會先去訊息池中看看有沒有message,假設有。則取出這個message,假設沒有再去建立。這個能夠防止message物件的反覆建立,節省資源。

而sendmessage(message)則每次要先new message。

private myhandler mhandler = new myhandler();

......

mhandler.sendresult(myhandler.update_view, null);

......

private class myhandler extends handler

}private void sendresult(int result, object obj)

}

或者用handler.post(runnable)的方法去更新ui。

mview.post(new runnable() 

});

在非UI執行緒中自製Dispatcher

在c 中,task.run當然是乙個很好的啟動新並行任務的機制,但是因為使用這個方法時,每次新的任務都會在乙個新的執行緒中 其實就是執行緒池中的執行緒 執行 這樣會造成某些情形下現場排程的相對困難,即使我隔離出乙個與ui無關的物件,然後用ui執行緒的dispatcher實現對ui執行緒的互動,但是用...

在非UI執行緒使用Handler

handler物件所繫結的執行緒並不取決於該handler物件由哪個執行緒構建,而是取決於該handler物件所繫結的looper屬於哪個執行緒。looper就像乙個訊息佇列 messagequeue 的管家,乙個訊息佇列只有乙個管家,並且管理者整個訊息佇列,而乙個訊息佇列內可以容納多個訊息 mes...

Android 在子執行緒中更新主線程UI

最近發現以前在eclipse中使用的runonuithread在studio中不能使了,所以又找了幾個更新ui的方法 第一種方法 new handler context.getmainlooper post new runnable 第二種方法 如果當前執行緒是ui執行緒,那麼行動是立即執行。如果當...