編輯:關於Android編程
之前發現在Android 5.0的機子上放在HashMap裡面的數據取出後跟Android 5.0之下的機子不一樣,導致項目裡面一個接口出了問題(接口做了緩存,request參數順序變化的話就會導致一些數據拿不到),然後去查看了一下Android 5.0和Android 4.4 關於HashMap的源碼,使用meld查看差異能夠看到果然google對HashMap的實現做了修改.
下圖左邊為Android 5.0的源碼,右邊為Android 4.4的源碼
從源碼中可以看到,Android 5.0 在計算key的HashCode使用的是下面的算法.
private static int secondaryHash(int h) { // Spread bits to regularize both segment and index locations, // using variant of single-word Wang/Jenkins hash. h += (h << 15) ^ 0xffffcd7d; h ^= (h >>> 10); h += (h << 3); h ^= (h >>> 6); h += (h << 2) + (h << 14); return h ^ (h >>> 16); }
而Android 4.4中計算Key的HashCode的算法明顯跟Android 5.0中不同,所以這也導致了在get之後,在兩個系統上同樣的數據不同的順序。如果對存儲的數據有順序需求的話改為使用紅黑樹構建的TreeMap就OK了.
static int secondaryHash(Object key) { int hash = key.hashCode(); hash ^= (hash >>> 20) ^ (hash >>> 12); hash ^= (hash >>> 7) ^ (hash >>> 4); return hash; }
前言讓我一起來看看 Iván Carballo和他的團隊是如何使用Espresso, Mockito 和Dagger 2 編寫250個UI測試,並且只花了三分鐘就運行成功
依賴注入就是將調用者需要的另一個對象實例不在調用者內部實現,而是通過一定的方式從外部傳入實例,解決了各個類之間的耦合。那麼這個外部,到底指的是哪裡,如果指的是另一個類,那
在Android系統中,每一個應用程序都是由一些Activity和Service組成的,這些Activity和Service有可能運行在同一個進程中,也有可能運行在不同的
1.觸摸事件的處理方式 (1)事件類型 觸摸事件(觸摸手機屏幕) 運動事件(如微信的搖一搖) 遠程控制事件(如藍牙)(2)響應者類通過復寫以下方法