1 Android事件分發(fā)機制次员?
分為三層:Activity、ViewGroup王带、View淑蔚。
1、如果事件不被中斷愕撰,整個事件流向是一個類U型圖刹衫。
2醋寝、dispatchTouchEvent 和 onTouchEvent 一旦return true,事件就停止傳遞了。
3带迟、dispatchTouchEvent 和 onTouchEvent return false的時候事件都回傳給父控件的onTouchEvent處理甥桂。
4.Intercept 的意思就攔截,每個ViewGroup每次在做分發(fā)的時候邮旷,問一問攔截器要不要攔截(也就是問問自己這個事件要不要自己來處理)如果要自己處理那就在onInterceptTouchEvent方法中 return true就會交給自己的onTouchEvent的處理黄选,如果不攔截就是繼續(xù)往子控件往下傳。
ACTION_MOVE和ACTION_UP在傳遞的過程中并不是和ACTION_DOWN 一樣婶肩,你在執(zhí)行ACTION_DOWN的時候返回了false办陷,后面一系列其它的action就不會再得到執(zhí)行了。簡單的說律歼,就是當(dāng)dispatchTouchEvent在進行事件分發(fā)的時候民镜,只有前一個事件(如ACTION_DOWN)返回true,才會收到ACTION_MOVE和ACTION_UP的事件险毁。
如果在某個控件的dispatchTouchEvent 返回true消費終結(jié)事件制圈,那么收到ACTION_DOWN 的函數(shù)也能收到 ACTION_MOVE和ACTION_UP。
對于ACTION_MOVE畔况、ACTION_UP總結(jié):ACTION_DOWN事件在哪個控件消費了(return true)鲸鹦, 那么ACTION_MOVE和ACTION_UP就會從上往下(通過dispatchTouchEvent)做事件分發(fā)往下傳,就只會傳到這個控件跷跪,不會繼續(xù)往下傳馋嗜,如果ACTION_DOWN事件是在dispatchTouchEvent消費,那么事件到此為止停止傳遞吵瞻,如果ACTION_DOWN事件是在onTouchEvent消費的葛菇,那么會把ACTION_MOVE或ACTION_UP事件傳給該控件的onTouchEvent處理并結(jié)束傳遞。
三級緩存底層實現(xiàn)
什么是三級緩存
網(wǎng)絡(luò)緩存, 不優(yōu)先加載, 速度慢,浪費流量
本地緩存, 次優(yōu)先加載, 速度快
內(nèi)存緩存, 優(yōu)先加載, 速度最快
三級緩存原理
首次加載 Android App 時橡羞,肯定要通過網(wǎng)絡(luò)交互來獲取圖片眯停,之后我們可以將圖片保存至本地SD卡和內(nèi)存中
之后運行 App 時,優(yōu)先訪問內(nèi)存中的圖片緩存卿泽,若內(nèi)存中沒有莺债,則加載本地SD卡中的圖片
總之,只在初次訪問新內(nèi)容時又厉,才通過網(wǎng)絡(luò)獲取圖片資源
內(nèi)存緩存實現(xiàn)方法
通過HashMap鍵值對的方式保存圖片九府,key為地址,value為圖片對象覆致,但因是強引用對象侄旬,很容易造成內(nèi)存溢出,可以嘗試SoftReference軟引用對象
通過HashMap>SoftReference 為軟引用對象(GC垃圾回收會自動回收軟引用對象)煌妈,但在Android2.3+后儡羔,系統(tǒng)會優(yōu)先考慮回收弱引用對象宣羊,官方提出使用LruCache
通過LruCacheleast recentlly use 最少最近使用算法
會將內(nèi)存控制在一定的大小內(nèi), 超出最大值時會自動回收, 這個最大值開發(fā)者自己定
HashMap底層實現(xiàn),hashCode如何對應(yīng)bucket?
HashMap是基于哈希表實現(xiàn)的汰蜘,每一個元素都是一個key-value對仇冯,其內(nèi)部通過單鏈表解決沖突問題,容量不足(超過了閾值)時族操,同樣會自動增長苛坚。
HashMap是非線程安全的,只是用于單線程環(huán)境下色难,多線程環(huán)境下可以采用concurrent并發(fā)包下的concurrentHashMap泼舱。
HashMap實現(xiàn)了Serializable接口,因此它支持序列化枷莉,實現(xiàn)了Cloneable接口娇昙,能被克隆。
tcp和udp的區(qū)別笤妙,tcp如何保證可靠的冒掌,丟包如何處理?
TCP與UDP的區(qū)別
TCP面向有鏈接的通信服務(wù) ?UDP面向無連接的通信服務(wù)
TCP提供可靠的通信傳輸 ? ? ?UDP不可靠,會丟包
TCP保證數(shù)據(jù)順序 ? ? ? ? ? ? ? ? UDP不保證
TCP數(shù)據(jù)無邊界 ? ? ? ? ? ? ? ? ? ? UDP有邊界
TCP速度快 ? ? ? ? ? ? ? ? ? ? ? ? ? UDP速度慢
TCP面向字節(jié)流 ? ? ? ? ? ? ? ? ? ?UDP面向報文
TCP一對一 ? ? ? ? ? ? ? ? ? ? ? ? ? ?UDP可以一對一蹲盘,一對多
TCP報頭至少20字節(jié) ? ? ? ? ? ? UDP報頭8字節(jié)
TCP有流量控制股毫,擁塞控制 ? ?UDP沒有
為什么UDP比TCP快
TCP需要三次握手
TCP有擁塞控制,控制流量等機制
為什么TCP比UDP可靠
TCP是面向有連接的辜限,建立連接之后才發(fā)送數(shù)據(jù)皇拣;而UDP則不管對方存不存在都會發(fā)送數(shù)據(jù)严蓖。
TCP有確認(rèn)機制薄嫡,接收端每收到一個正確包都會回應(yīng)給發(fā)送端。超時或者數(shù)據(jù)包不完整的話發(fā)送端會重傳颗胡。UDP沒有毫深。因此可能丟包。