《第一行代码》学习笔记35-服务Service(2)
1.Android的UI線程不安全,想要更新應用程序里的UI元素,則須在主線程中進行,否則會出現異常。
2.Android不允許在子線程里進行UI操作,對于該情況,Android提供了一套異步消息處理機制,完美解決在子線程中進行UI操作。
3.解析異步消息處理機制:
Android中的異步消息處理有四部分,Message, Handler, MessageQueue和Looper。
(1)Message:線程之間傳遞的消息,在內部攜帶少量的信息,用在不同線程間交換數據。
(2)Handler:處理者,用于發送和處理消息。發送消息使用Handler的sendMessage()方法,發出的消息經過一系列輾轉處理,
會傳遞到Handler的handleMessage()方法中。
(3)MessageQueue:消息隊列,用于存放所有通過Handler發送的消息。這部分消息會一直存在于消息隊列中,等待被處理。
每個線程中只有一個MessageQueue對象。
(4)Looper:每個線程中的MessageQueue的管家,調用Looper的loop()方法后,會進入到無限循環中,然后每當發現MessageQueue
中存在一條消息,會將它取出,傳遞到Handler的handleMessage()方法中。每個線程也只會有一個Looper對象。
4.異步消息處理的整個流程:Firstly,在主線程中創建一個Handler對象,并重寫handleMessage() 方法;Secondly,當子線程中需
要進行UI操作時,就創建個Message對象,并通過Handler將這條消息發送出去;Thirdly,消息被添加到MessageQueue隊列中等待被
處理,而Looper則會一直嘗試從MessageQueue中取出待處理消息,最后分發回Handler的handleMessage() 方法中。
Handler在主線程中創建,此時handleMessage()方法中的代碼也會在主線程中運行,于是安心進行UI操作。
5.整個異步消息處理機制的流程示意圖如下:
一條Message經過這樣一個流程的輾轉調用后,也就從子線程進入到主線程,從不能更新UI變成可以更新UI。
轉載于:https://www.cnblogs.com/Iamasoldier6/p/5047354.html
總結
以上是生活随笔為你收集整理的《第一行代码》学习笔记35-服务Service(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 省呗打电话审核吗?如果接到电话就这么应对
- 下一篇: 光大凯撒旅游白金卡积分怎么用?积分规则介