Android常見問題
- 內存泄漏: 不使用的內存空間(對象)一直被引用著沒有得到釋放蹦渣。
- 內存抖動: 短時間內大量創(chuàng)建對象又在短時間內頻繁觸發(fā)GC導致內存波動很大,android虛擬機執(zhí)行GC操作時需要耗費CPU性能頻繁GC會到來嚴重的性能問題惠猿。內存抖動是因為大量的對象被創(chuàng)建又在短時間內馬上被釋放。瞬間產生大量的對象會嚴重占用Young Generation的內存區(qū)域款筑,當達到閥值顽耳,剩余空間不夠的時候,也會觸發(fā)GC拘鞋。即使每次分配的對象占用了很少的內存砚蓬,但是他們疊加在一起會增加Heap的壓力,從而觸發(fā)更多其他類型的GC盆色。這個操作有可能會影響到幀率灰蛙,并使得用戶感知到性能問題。
- 內存溢出:內存泄漏到一定程度超出系統(tǒng)給進程分配的內存大小就會造成內存溢出程序奔潰隔躲,或者加載一個或多個大型文件(圖片)到內存中也會導致內存溢出摩梧。
- ANR: 應用無響應,代碼效率過低或者在主線程執(zhí)行耗時操作宣旱。
內存監(jiān)控工具
- adb shell dumpsys meminfo:內存泄露檢測和改善仅父。
- Memory Monitor:查看整個app所占用的內存,以及發(fā)生GC的時刻浑吟,短時間內發(fā)生大量的GC操作是一個危險的信號笙纤。
- Allocation Tracker:使用此工具來追蹤內存的分配。
- Heap Viewer:實時查看App分配的內存大小和空閑內存大小组力,發(fā)現(xiàn)Memory Leaks
- Heap Snapshot:獲取Java堆內存詳細信息粪糙,可以分析出內存泄漏的問題
- Memory Analyzer Tool:MAT一款詳細分析Java堆內存的工具,該工具非常強大忿项,為了使用該工具,我們需要hprof文件,該文件我們在之前的Heap Snapshot工具的時候轩触,我們就生成了該文件寞酿。但是該文件不能直接被MAT使用,需要進行一步轉化脱柱,可以使用hprof-conv命令來轉化伐弹,但是Android Studio可以直接轉化。
性能監(jiān)控工具
- Profile GPU Rendering:連續(xù)多幀每一幀的刷新時間都超過16ms就應該被視為性能問題榨为。
- Profile GPU Rendering : M Update:Profile GPU Rendering的升級版惨好。
- TraceView:從代碼層面分析性能問題,針對每個方法來分析随闺,比如當我們發(fā)現(xiàn)我們的應用出現(xiàn)卡頓的時候日川,我們可以來分析出現(xiàn)卡頓時在方法的調用上有沒有很耗時的操作,關注以下兩個問題:+ 調用次數不多矩乐,但是每一次執(zhí)行都很耗時+ 方法耗時不大龄句,但是調用次數太多
- Systrace:計算容器的性能并發(fā)現(xiàn)性能的瓶頸。
- GPU Monitor:分析GPU的性能散罕,實時查看繪制每一幀所花費的時間分歇,與Profile GPU Rendering差不多。
- Strict Mode:UI線程被阻塞超過5秒欧漱,就會出現(xiàn)ANR职抡,這太糟糕了。防止程序出現(xiàn)ANR是很重要的事情误甚,那么如何找出程序里面潛在的坑缚甩,預防ANR呢?很多大部分情況下執(zhí)行很快的方法靶草,但是他們有可能存在巨大的隱患蹄胰,這些隱患的爆發(fā)就很容易導致ANR。Android提供了一個叫做Strict Mode的工具奕翔,我們可以通過手機設置里面的開發(fā)者選項裕寨,打開Strict Mode選項,如果程序存在潛在的隱患派继,屏幕就會閃現(xiàn)紅色宾袜。我們也可以通過StrictMode API在代碼層面做細化的跟蹤,可以設置StrictMode監(jiān)聽那些潛在問題驾窟,出現(xiàn)問題時如何提醒開發(fā)者庆猫,可以對屏幕閃紅色,也可以輸出錯誤日志绅络。
- LINT:Lint是Android提供的一個靜態(tài)掃描應用源碼并找出其中的潛在問題的一個強大的工具月培。例如嘁字,如果我們在onDraw方法里面執(zhí)行了new對象的操作,Lint就會提示我們這里有性能問題杉畜,并提出對應的建議方案纪蜒。Lint已經集成到Android Studio中了,我們可以手動去觸發(fā)這個工具此叠,點擊工具欄的Analysis -> Inspect Code纯续,觸發(fā)之后,Lint會開始工作灭袁,并把結果輸出到底部的工具欄猬错,我們可以逐個查看原因并根據指示做相應的優(yōu)化修改。Lint的功能非常強大茸歧,他能夠掃描各種問題倦炒。當然我們可以通過Android Studio設置找到Lint,對Lint做一些定制化掃描的設置举娩,可以選擇忽略掉那些不想Lint去掃描的選項析校,我們還可以針對部分掃描內容修改它的提示優(yōu)先級。建議把與內存有關的選項中的嚴重程度標記為紅色的Error铜涉,對于Layout的性能問題標記為黃色Warning智玻。
- Monkey:Monkey是可以運行在模擬器里或實際設備中的程序。它向系統(tǒng)發(fā)送偽隨機的用戶事件流(如按鍵輸入芙代、觸摸屏輸入吊奢、手勢輸入等),實現(xiàn)對正在開發(fā)的應用程序進行壓力測試纹烹。
- 其他工具:其他性能檢測工具
網絡監(jiān)控工具
- Network monitor:實時監(jiān)控上傳和接收的網速