因為線程簡通信經(jīng)常用到Handler所以這里分析一下涛浙,順便說一下AsynTask逊彭。
先說說兩個概念:
進程
進程操作系統(tǒng)是結(jié)構(gòu)的基礎,是計算機中正在運行的程序?qū)嵗谀颍梢员环峙浣o處理機并被處理機執(zhí)行。
線程
線程是進程中某個單一順序的控制流较解,也被稱為輕量級進程畜疾,他是處理機調(diào)度的基本單位。
Handler
如上圖印衔,這個是作者很簡單的畫出來的庸疾,但是能夠清晰的展現(xiàn)出工作原理。Handler從工作線程中拿Message消息放到中間的Message池子中当编,我們專業(yè)術(shù)語叫做Message Queue先進先出
届慈,然后Looper循環(huán)著從池子里拿發(fā)過來的消息,然后給主線程忿偷,主線程通過Handler拿到工作線程的Message金顿,然后做出響應,這就是一個流程鲤桥。
不多比比上代碼截圖
Sorry 只能工作線程往主線程發(fā)消息揍拆?
當然不可能了,主線程也是可以往工作線程發(fā)消息的茶凳,只是主線程android自帶一個Looper和MessageQueue嫂拴,如果想要主線程往工作線程中發(fā)消息那就要在工作線程中我們自己通過代碼制造一個Looper和MessageQueue,然后在走上面的流程就可以了贮喧。
coder:
可以看到工作線程自己新建了一個Looper和MessageQueue筒狠,用于處理主線程發(fā)過來的消息,驗證了我們上面講到的工作線程和主線程之間相互發(fā)消息的機制箱沦。
AsynTask
AsynTask類用于創(chuàng)建并執(zhí)行工作線程辩恼,并能將工作線程中的數(shù)據(jù)方便的發(fā)送給主線程用于展示。
coder:
上面就是AsynTask完整的結(jié)構(gòu)圖谓形,在實際的操作中只需要知道他的使用場景對號入座即可灶伊。
希望大家喜歡我的分享。