A. android學習--廣播機制
Android系統中的廣播機制提供了方便、系統級的消息通知功能,有助於實現高效通信。
接收廣播是通過廣播接收器實現的。注冊廣播有兩種方式:靜態注冊和動態注冊。
靜態注冊允許程序在未啟動時接收廣播,注冊方式在AndroidManifest.xml中完成。動態注冊則更靈活,注冊和注銷操作在代碼中完成,程序啟動後即可接收廣播。
接收廣播時,需注意許可權問題,否則程序會崩潰,需在AndroidManifest.xml中聲明相應的訪問許可權。
發送廣播有兩種類型:標准廣播和有序廣播。
標准廣播是非同步執行,接收者幾乎同時接收廣播消息,適用於不涉及順序的全局廣播。有序廣播則是同步執行,一次廣播只有一個接收者處理完,然後繼續傳遞給下一個,適用於需要按順序執行的全局廣播。
標准廣播允許任何應用接收,存在安全風險。為了解決安全問題,Android提供了本地廣播機制,僅限於程序內部傳遞,僅由本應用的廣播接收器接收。
發送標准廣播的代碼示例:定義廣播接收器MyBroadcastReceiver,通過代碼動態注冊,完成廣播發送。發送操作在main_activity.xml中實現,通過MainActivity類調用發送方法。
B. android事件分發機制 什麼意思
android事件分發機制 就是一個觸摸事件發生了,從一個窗口傳遞到一個視圖,再傳遞到另外一個視圖,最後被消費的過程,在android中還是比較復雜的傳遞流程如下:
(1) 事件從Activity.dispatchTouchEvent()開始傳遞,只要沒有被停止或攔截,從最上層的View(ViewGroup)開始一直往下(子View)傳遞。子View可以通過onTouchEvent()對事件進行處理。
(2) 事件由父View(ViewGroup)傳遞給子View,ViewGroup可以通過onInterceptTouchEvent()對事件做攔截,停止其往下傳遞。
(3) 如果事件從上往下傳遞過程中一直沒有被停止,且最底層子View沒有消費事件,事件會反嚮往上傳遞,這時父View(ViewGroup)可以進行消費,如果還是沒有被消費的話,最後會到Activity的onTouchEvent()函數。
(4) 如果View沒有對ACTION_DOWN進行消費,之後的其他事件不會傳遞過來。
(5) OnTouchListener優先於onTouchEvent()對事件進行消費。
上面的消費即表示相應函數返回值為true。
C. 請教貼android本地緩存機制
Android中提供的緩存機制是利用本地存儲實現的。
(1)新下載數據的時候,將數據緩存到本地。
(2)再次下載之前,先判定該資源是否已經被緩存,如果是,則優先使用本地資源;如果沒有被緩存,則湊個網路上下載資源,並進行緩存。
實際上使用緩存機制的時候,還要考慮到額外的兩個條件:空間和時間。
對於存儲空間的條件限制,處理方法一般是結合應用下載量大小和用戶選擇來確定,比如以緩存文本為主的應用,由於文本本身佔用極小的空間,其緩存大小可以根據用戶的磁碟空間大小來確定;以緩存圖片為主應用,由於圖片佔用空間較大,更加需要用戶參與指定空間大小。
對於時間的限制,可以通過設定緩存的過期時間來實現,為下載到緩存的數據設定時間戳,在讀取該緩存的時候,比較時間戳,超過時間限制的則需要更新該緩存。
在清空應用緩存的時候也需要謹慎,在存儲空間已滿,用戶注銷的時候可以考慮清空該用戶的整個緩存,而在普通升級應用的情況下並不需要清空整個緩存。
D. Android事件分發機制
Android中對視圖的Touch事件進行分發處理。
單手指操作:ACTION_DOWN -> ACTION_MOVE -> ACTION_UP
多手指操作:ACTION_DOWN -> ACTION_POINTER_DOWN -> ACTION_MOVE -> ACTION_POINTER_UP -> ACTION_UP.
(1) dispatchTouchEvent() :事件分發
(2) onInterceptTouchEvent() :事件攔截
(3) onTouchEvent() :事件處理
ViewGroup 的相關事件有三個:onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent。
View 的相關事件只有兩個:dispatchTouchEvent、onTouchEvent。
先分析ViewGroup的處理流程:首先得有個結構模型概念:ViewGroup和View組成了一棵樹形結構,最頂層為Activity的ViewGroup,下面有若乾的ViewGroup節點,每個節點之下又有若乾的ViewGroup節點或者View節點,依次類推。如圖:
點擊事件達到頂級 View(一般是一個 ViewGroup),會調用 ViewGroup 的 dispatchTouchEvent 方法,如果頂級 ViewGroup 攔截事件即 onInterceptTouchEvent 返回 true,則事件由 ViewGroup 處理,這時如果 ViewGroup 的 mOnTouchListener 被設置,則 onTouch 會被調用,否則 onTouchEvent 會被調用。也就是說如果都提供的話,onTouch 會屏蔽掉 onTouchEvent。在 onTouchEvent 中,如果設置了 mOnClickListenser,則 onClick 會被調用。如果頂級 ViewGroup 不攔截事件,則事件會傳遞給它所在的點擊事件鏈上的子 View,這時子 View 的 dispatchTouchEvent 會被調用。如此循環。
E. Android中輪詢機制是怎麼用的
這里使用service。
後台service進行定時的輪詢,如果有新消息,獲取後推送給自己的頁面。