一.handler的例項化
如果你不帶引數的例項化:handler handler = new handler();那麼這個會預設用當前執行緒的looper
一般而言,如果你的handler是要來重新整理操作ui的,那麼就需要在主線程下跑。
情況:1.要重新整理ui,handler要用到主線程的looper。那麼在主線程 handler handler = new handler();,如果在其他執行緒,也要滿足這個功能的話,要handler handler = new handler(looper.getmainlooper());
2.不用重新整理ui,只是處理訊息。 當前執行緒如果是主線程的話,handler handler = new handler();不是主線程的話,looper.prepare(); handler handler = new handler();looper.loop();或者handler handler = new handler(looper.getmainlooper());
若是例項化的時候用looper.getmainlooper()就表示放到主ui執行緒去處理。
如果不是的話,因為只有ui執行緒預設loop.prepare();loop.loop();過,其他執行緒需要手動呼叫這兩個,否則會報錯。
二.message的例項化
最好使用message msg = handler.obtainmessage();因為此時的msg不是自己新建的,就不需要去申請記憶體,效能上會高出很多,然而傳送msg時,用obtainmessage()和sendmessage()都行。
Handler相關筆記
1,說說handler機制原理 handler的出現就是為了保證ui執行緒安全,對ui的修改只有ui執行緒可以操作,不允許其他執行緒操作,下面對handler非同步訊息處理機制再做一下簡單的介紹 1 成員介紹 message 訊息,即執行緒間傳遞的物件,傳遞的資訊包含在其中。例如後台執行緒在處理資料...
Handler相關面試題
1.handler的作用 a 在非ui執行緒更新ui b 傳送延遲訊息 2.為什麼android設計只能ui執行緒更新ui?a 解決多執行緒併發問題 b 提高介面更新的效能問題 c 架構設計的簡單 3.handler相關的異常 a 只有主線程才能更新ui 解決辦法 向主線程傳送訊息,在主線程的han...
Handler原理核心點筆記
1.在looper中prepare 用於 建立乙個threadlocal物件,並存放乙個looper例項,並且prepare 方法只能代用一次,多次呼叫會出異常,所以乙個執行緒只有乙個looper物件,建立乙個messagequeque物件,用 於存放message。2.looper.loop 為乙...