android 布局優化簡述
影響應用的卡頓的四種場景:ui繪製、應用啟動、頁面跳轉、時間響應
其中由兩種根本原因導致:
介面繪製:
主要是繪製的層級深、頁面複雜、重新整理不合理。導致卡頓的場景出現在ui和啟動後的初始頁面以及跳轉到頁面的繪製上。
資料處理:
原因是資料處理量太大,分為三年中情況,1、資料處理在ui執行緒 2、資料處理過於複雜,導致主線程拿不到時間片 3、記憶體增加導致gc頻繁導致卡頓
解決方案:
1、在頁面非ui部分的邏輯處理盡量避免放在主線程中,例如演算法邏輯和網路請求
2、ui布局優化:減少頁面層級結構,合理使用relativelayout和linerlayout、使用merge標籤
使用viewstub(有需求需要展示不同頁面,會員和非會員)但是viewstub只會初始化一次,需要重複載入不同布局檔案需求不適合。
布局復用:例如topbar布局可能會在多個布局中都存在,可以使用include標籤。
少用warp_content,這會在onmeasure導致計算成本提高
少使用無用屬性
hashmap屬性簡介
hashmap 是基於 map 介面實現的一種鍵-值對的儲存結構,允許null 值,同時非有序,非同步(即執行緒不安全)。hashmap 的底層實現是
陣列 + 鍊錶 + 紅黑樹(jdk1.8 增加了紅黑樹部分)。
hashmap 定位元素位置是通過鍵 key 經過擾動函式擾動後得到 hash 值,然後再通過 hash & (length - 1)代替取模的方式進行元素定位的。hashmap 是使用鏈位址法解決 hash 衝突的,當有衝突元素放進來時,會將此元素插入至此位置鍊錶的最後一位,形成單鏈表。當存在位置的鍊錶長度 大於等於 8 時,hashmap 會將鍊錶 轉變為 紅黑樹,以此提高查詢效率。
hashmap 的容量是 2 的 n 次方,有利於提高計算元素存放位置時的效率,也降低了 hash 衝突的機率。因此,我們使用 hashmap 儲存大量資料的時候,最好先預先指定容器的大小為 2 的 n 次方,即使我們不指定為 2 的 n次方,hashmap 也會把容器的大小設定成最接近設定數的 2 的 n 次方,如,設定 hashmap 的大小為 7 ,則 hashmap 會將容器大小設定成最接近 7 的
乙個 2 的 n 次方數,此值為 8 。hashmap 的負載因子表示雜湊表空間的使用程度(或者說是雜湊表空間的利用率)。當負載因子越大,則 hashmap 的裝載程度就越高。也就是能容納更多的元素,元素多了,發生 hash 碰撞的機率就會加大,從而鍊錶就
會拉長,此時的查詢效率就會降低。當負載因子越小,則鍊錶中的資料量就越稀疏,此時會對空間造成浪費,但是此時查詢效率高。
hashmap 不是執行緒安全的,hashtable 則是執行緒安全的。但 hashtable 是乙個遺留容器,如果我們不需要執行緒同步,則建議使用 hashmap,如果需要執行緒同步,則建議使用 concurrenthashmap。
在多執行緒下操作 hashmap,由於存在擴容機制,當 hashmap 呼叫 resize()進行自動擴容時,可能會導致死迴圈的發生。我們在使用 hashmap 時,最好選擇不可變物件作為 key。例如 string,integer 等不可變型別作為 key 是非常明智的。
Android版本相關知識
xmlns android android versioncode 3 android versionname 1.2.1 package com.example.updatedemo android allowbackup true android icon mipmap ic launcher ...
android 筆記知識鏈結
android中讓 的menu的icon tint 生效 圖示顏色和文字顏色設定 樣式顏色,圖示設定 中新增選單 android,安卓,menu顯示位置,及樣式調整,及使用popupwindow 實現menu下拉列表gong 安卓開發彈出式選單的四種方案 使用popupmenu及第三方元件 andr...
lua相關知識筆記
print hellow world 變數宣告直接宣告並賦值 id 1 age 23 name 逆天大神 true print age,name print age id 會列印相加後的值 print 20 152 對於數字型別的字串會相加後列印 172 if id 1 then print id為...