《移動App性能評測與優化》讀書筆記

第一章:內存
 
內存的主要組成索引:
Native Heap:Native代碼分配的內存,虛擬機和Android框架自己也會分配
Dalvik Heap:Java代碼分配的對象
Dalvik Other:類的數據結構和索引
so mmap:Native代碼和常量
dex mmap:Java代碼和常量
 
內存工具:
觀察Dalvik內存:Android Studio/Memory Monitor
觀察總體內存:dumpsys meminfo
觀察總體內存的詳細組成:cat /proc//smaps
詳細分析Dalvik內存:Eclipse Memory Analyzer
 
Pss表示進程實際使用的物理內存,是由私有內存加上按比例分擔計算的各進程共享內存獲得的值。
Dalvik Pss內存 = 私有內存Private Dirty + (共享內存Shared Dirty/共享的進程數)
Private Dirty存放的是應用新建(new)出來的對象實例,是每一個應用所獨有的,不會再共享。
Shared Dirty主要是zygote加載的Android框架部分,會被全部Android應用進程共享
 
內存分配的最小單位是頁面,一般是4KB,這個限制每每會引起各類碎片問題。
 
經驗:
1.儘可能不要在循環中建立不少臨時變量
2.能夠將大型的循環拆散、分段或按需執行
 
第二章:電量
Android系統上App的電量消耗由cpu、wake lock、數據傳輸(移動網絡&Wifi)、Wifi運行、gps、other sensors組成
 
詳細耗電信息:adb shell dumpsys batterystats|batteryinfo(4.1-4.3用batteryinfo)
 
Android5.0 Google使用工具Battery Historian 在Web端展現手機狀態變化。6.0更新Battery Historian 2.0加入引發手機狀態變化的應用
 
經驗:
1.當應用退到後臺,儘可能減小應用的主動運行(減小CPU 時間片)
2.前臺運行時,不要註冊wake lock,此時註冊沒有意義,卻會被計算到應用電量消耗中
3.合理設置GPS使用時長和使用頻率
 
第三章:流暢度
爲何不用FPS,而用SM(Smoothness)
1.有時FPS很低,卻不感受卡頓。屏幕無繪製需求,畫面是靜止的,因此FPS爲0。
2.App中止操做,FPS還一直變化。屏幕每一幀的合成都是針對手機全部進程。
 
Vertical Synchronization(垂直同步),VSync機制理論1秒有60幀,即1幀大約16.6ms。
 
電影只有24幀,不以爲卡是由於每一幀渲染都是勻速的。
 
手機開發者選項裏打開過分繪製區域查看,無色、藍色、綠色、淺紅、暗紅依次指像素點繪製了1次、2次、3次、4次、5次。對於有多層背景顏色的Layout,留最上面一層顏色便可,其餘底層的顏色均可以去掉
 
Tracer for OpenGL ES工具能夠記錄和分析App每一幀的繪製過程
 
Hierarchy Viewer 查找UI佈局不合理
1.沒有用的父佈局,經過標籤合併減小UI的層次
2.使用線性佈局LinearLayout排版致使UI層次變深,減小層次或用相對佈局RelativeLayout代替LinearLayout
3.不經常使用的UI被設置成GONE,用標籤代替GONE提升UI性能
 
使用Lint靜態掃描代碼,發現問題
 
使用Traceview和Systrace工具分析代碼,兩種思路:
1.找出在主線程耗時較大的函數,經過緩存,或把耗時操做移出主線程,或把滑動過程當中出現的耗時操做延時到滑動中止後纔開始
2.分析滑動過程當中CPU的工做,讓CPU優先執行主線程的工做,儘可能不要被其餘線程搶佔
 
第五章:流量
手機抓包:tcpdump抓包;wireshark分析;pcap2har爲一個分析pcap的Python庫文件
 
安卓有TCP統計功能,UID=10000+PID
/proc/uid_stat/UID目錄下,tcp_snd和tcp_rcv就是TPC發送和接收流量
 
流量優化經驗總結:
1.增量拉取數據
2.界面展現的數據非WIFI下不預取
3.實時的信息上報後臺運行時改爲非實時上報
4.非WIFI場景下降耗流量的功能的網絡通訊頻率
5.合併網絡請求,減小請求次數
6.儘可能利用WIFI傳輸信息
 
第六章:安裝包瘦身
使用UCDetector掃描無用代碼,反射、在XML中配置注入方式、第三方工程的引用、jar包調用等代碼的引用方法沒法掃描到。
 
檢查重複代碼工具simian
 
使用AndroidSDK\tools下的Lint掃描Unused Resources
 
圖片壓縮:用pnggauntlet對非點9圖片壓縮,用crunch對點9圖片壓縮。
 
小尺寸、色彩數少、有alpha通道透明度的時候,使用PNG;大尺寸、色彩漸變色多的用JPG。JPG的圖片,讓設計師出圖時直接出JPG格式的圖片
相關文章
相關標籤/搜索