編輯:關於Android編程
先說為什麼需要Handler:
Android的主線程又叫UI線程,用於處理與UI相關的時間。Android只允許在主線程中修改UI組件,當我們在其他線程中需要修改UI界面時,就需要發送消息到主線程,再由主線程來處理UI的修改事件。
在UI線程中執行耗時操作或網絡操作,否則會拋出ANR (“Application Not Responding”)異常或NetworkOnMainThreadExceptionwill異常。
在這些時候,我們用Handler來進行消息的傳遞和處理。
下面來介紹Handler類:
(1)兩個主要功能:
1.在非主線程中發送消息。
2.在主線程中獲取、處理消息。
(2)一起工作的幾個組件
Message:Handler接收和處理的消息對象
Looper:每個線程有一個Looper,負責管理MessageQueue。它的loop方法不斷從MessageQueue中抽取Message交給Handler處理。
MessageQueue:由Looper負責管理的消息隊列,用FIFO的方式管理Message。Looper的構造器中會創建一個MessageQueue對象。
(3)Handler用於發送、處理Message的方法:
void handleMessage(Message msg):處理消息的方法,需要自己重寫。
boolean hasMessages(int what, Object object):檢查消息隊列中是否包含what屬性為指定值且object屬性為指定對象的消息。
boolean hasMessages(int what):檢查消息隊列中是否包含what屬性為指定值的消息。
Message obtainMessage():獲取消息。
boolean sendEmptyMessage(int what):發送空消息。
boolean sendEmptyMessageAtTime(int what, long uptimeMillis):在指定的時間發送空消息。
boolean sendEmptyMessageDelayed(int what, long delayMillis):一段時間後發送空消息。
boolean sendMessage(Message msg):發送消息。
boolean sendMessageAtFrontOfQueue(Message msg):消息加入到消息隊列的最前面。
boolean sendMessageAtTime(Message msg, long uptimeMillis):在指定時間發送消息。
boolean sendMessageDelayed(Message msg, long delayMillis):一段時間後發送消息。
(4)Handler的消息處理機制:
開發者需要重寫Handler類的消息處理方法,但新啟動的線程發送消息時,消息會發送到與之關聯的MessageQueue,Handler不斷從MessageQueue中獲取並處理消息,在此時調用消息處理方法。
(5)利用Handler處理其他線程中需要作出的UI修改:
Android系統在啟動的時候會為Activity創建一個消息隊列和消息循環(Looper)。為了處理非主線程中的UI處理要求,我們首先在新線程中發送消息,然後在主線程中重寫Handler的handleMessage()方法實現UI修改的要求。
可能我們在開發中會時常用到計時器這玩意兒,比如在錄像的時候,我們可能需要在右上角顯示一個計時器。這個東西其實實現起來非常簡單。只需要用一個控件Chronometer,是的
第1節 Broadcast Receiver概述很多時候,我們希望一個應用程序在它沒有運行起來的時候,也能感知系統狀態的某些變化,如果條件合適,就讓這個應用就運行起來。比
Tab標簽頁是一個非常常用的控件,.net裡面就有multipage+tabstrip組合通過標簽的切換實現頁面的切換,同理html裡面我們常用frameset來
原生應用不僅可以跳轉到RN頁面,也可以吧RN的組件放到原生應用中,作為原生應用的一部分。首先介紹如何把react native嵌入到android中,然後再介紹如何把RN