Handler是android用來線程切換的,主要的工作原理是Handler通過sendMessage發(fā)送一個Message到MessageQueue中丑念,它是一個單向鏈表結(jié)構(gòu)脸狸。Handler都是需要有一個Looper的宫仗,因為在他的初始化中會去檢查這個Looper是否存在迹栓,不存在則報錯珍逸,所以在使用Handler前需要Looper.prepare,然后開啟Looper.loop循環(huán)從消息隊列中取出數(shù)據(jù)吵取,通過Message的msg.target.dispatchMessage(msg);發(fā)送到Handler處理禽额。需要注意:Message默認持有Handler的引用,很容易造成內(nèi)存泄漏皮官。我們平時不需要初始化Looper是因為在ActivityThread主線程中的main方法中默認實現(xiàn)了Looper.prepareMainLooper,所以如果你的Looper是在Ui線程初始化的脯倒,那么你的消息處理就是在Ui線程,如果在子線程初始化Looper的話捺氢,那么就是在子線程處理消息了盔憨。
Handler.sendMessage和Handler.obtainMessage有什么區(qū)別?
obtainMessage獲取到的Message是從消息池中獲取到的讯沈,如果消息池中沒有消息再去new郁岩,而sendMessage傳的參數(shù)是我們已經(jīng)new好了的