Android:Handler學習總結
有那些方法加入到主UI執行緒中執行
1.Activity.runonUiThread(Runnable)
2.View.post(Runnable); View.postDelay(Runnable,long)
3.Handler
4.AsyncTask
Handler的作用
1.執行計劃任務,你可以在預定的實現執行某些任務,可以模擬定時器
2.執行緒間通訊。在Android的通訊啟動時,會建立一個主執行緒,主執行緒會建立一個訊息佇列來處理各種訊息。當你建立子執行緒時,你可以在你的子執行緒中拿到父執行緒中建立的Handler物件,就可以通過該物件向父執行緒的訊息佇列傳送訊息了。由於Android要求在UI執行緒中更新介面,因此,可以通過該方法在其他執行緒中更新介面。
3)確保操作始終在某個特定的執行緒中執行。例如當我們從資料庫載入資料時,除了程式啟動時需要載入外,每當我們接收資料改變時也需要重新載入。為了確保資料的有效性(始終使用最後一次查詢得到的資料),並減小不必要的查詢操作,我們應當確保他們在同一個執行緒中執行。
角色描述
1.Looper:(相當於隧道) 一個執行緒可以產生一個Looper物件,由它來管理此執行緒裡的Message Queue(車隊,訊息隧道)
2.Handler:你可以構造Handler物件來與Looper溝通
3.Message Queue(訊息佇列):用來存放執行緒放入的訊息
4.執行緒:UI thread通常是main thread,而Android啟動程式時會替它建立一個Message Queue
Looper的實現:
當前執行緒有一個Looper這樣的迴圈在監聽訊息佇列,這是一個死迴圈,主執行緒好像可以不用管Looper,其他邏輯程式碼可以照常往下走,但這個又不是而外的執行緒,這不是和我們學習的常理相悖麼?
Looper由系統控制的迴圈。在我們的執行緒沒有新開,但是在系統裡面vm會有
其實Looper的實現和Windows程式設計的訊息機制非常相似
對於正在執行的Message,呼叫removeMessage會有什麼後果?
1.呼叫removeMessage移除一個還沒有開始執行的message,看看會有什麼效果?
那麼這個message就不會執行了
2.移除一個正在執行的message,觀察有什麼效果
這個message如果被處理了,移除就沒有效果了
Handler其實很簡單
1.Handler例項與訊息處理是關聯的,傳送和接收要匹配
2.只能依附在HandlerThread
3.可以通過設定Looper來選擇依附的執行緒
4.所有的操作都是在同一個執行緒中
5.removeMessage只能移除佇列中的Message
6.如果只通過Handler.post()方法將執行緒壓入佇列時,直接呼叫的是執行緒的run()方法,則主執行緒和呼叫的執行緒處於
同一個執行緒中。
同一個HandlerThread可以有多個Handler麼? Yes
同一個HandlerThread中使用多個Handler Message會混淆麼? 為什麼?
No 每一條訊息都有一個target欄位,這個target欄位就標識了是哪個handler
考核目標
1.使用Handler是非同步的,它會建立新執行緒嗎?
No 依附線上程的Looper中
2.Handler是在主執行緒內?
不一定 可以通過Looper選擇依附的執行緒
3.Handler的post和sendMessage方法,使用的是一個佇列還是兩個
1個
4.子執行緒建立一個Handler,然後sendMessage會怎樣
報錯
5.Handler中不同的訊息有可能被同時處理嗎?
不可能 因為他們執行在同一個執行緒中
6.當Handler在處理訊息時,如果收到removeMessage(),會中斷這個處理麼?
不會
相關文章
- Android學習-HandlerAndroid
- Android Handler面試總結Android面試
- Android學習筆記·HandlerAndroid筆記
- Android原始碼學習之handlerAndroid原始碼
- 2018.03.06 Android Handler學習筆記Android筆記
- Android學習: 疑難問題總結Android
- Android中handler問題彙總Android
- Handler_read_*的總結
- Android Handler機制之總目錄Android
- 學習總結
- android原始碼學習-Handler機制及其六個核心點Android原始碼
- MYSQL學習總結MySql
- 近期學習總結
- KUDU學習總結
- CompletableFuture學習總結
- SpringCloud 學習總結SpringGCCloud
- awk 學習總結
- MyBatis 學習總結MyBatis
- Maven學習總結Maven
- Ajax學習總結
- JVM學習總結JVM
- mysqlimport學習總結MySqlImport
- WorkFlow學習總結
- JNI 學習總結
- SVG學習總結SVG
- 【TS】學習總結
- Kafka 總結學習Kafka
- Typescript學習總結TypeScript
- python學習總結Python
- Oracle學習總結Oracle
- redis學習總結Redis
- ConstraintLayout 學習總結AI
- BOM學習總結
- tkinter學習總結
- vue學習總結Vue
- HSF學習總結
- HTML學習總結HTML
- Mybatis學習總結MyBatis
- JavaWeb學習總結JavaWeb