編輯:關於Android編程
什麼是APP性能優化?一言以蔽之,就是使APP運行的更高,更快,更強,更穩定。在代碼不夠壯健的時候,APP裡的問題是出於熵增狀態,當熵增到達一個臨界點時,就會引發OOM、ANR、Crash、卡頓等問題。本文,就來研究研究如何去做到APP性能優化。
這裡所說的卡頓專門是指用戶在使用Android設備的時候出現了丟幀的現象。當某些頁面UI比較復雜的時候,Android系統可能無法及時的完成頁面UI的渲染。Android系統的渲染機制為了讓用戶感覺不到卡頓,從而將輸出的幀數設置為了60fps(Frames per Second)。由於人類眼睛的特殊生理結構,如果所看畫面的幀率是高於24的話,則會認為是連貫的,這個現象稱之為視覺暫留。一般來說,30fps是可以接受的。但是如果提升到60fps的話,可以明顯提升交互感和逼真感,超過75fps則不容易察覺到有明顯的流暢度提升了。而且,當幀率越高時,系統在渲染的時候所需要的資源就越高。為了將資源利用達到最大化,Android系統將輸出的幀率固定在了60fps.
為了達到60fps,則Android系統需要在1秒渲染60次,每16ms就需要渲染一次,即發出一次垂直同步(VSYNC)信號,來觸發對UI的渲染。那麼,程序的大部分及時響應的操作就必須要在16ms內完成。
舉個例子:當有個操作耗時20ms,系統在接收到VSYNC信號的時候就無法對UI進行渲染,就會發生丟幀現象。
1.減少UI層疊數。
2.減少動畫繪制次數。
3.優化算法。
4.避開渲染高峰,不要將所有控件同時渲染。
5.主線程不要做耗時操作,耗時操作統統交給子線程來負責。
6.避開GC高峰。
TraceView
首先,打開Android開發工具DDMS。(AndroidStudio的是從Tools->Android->Android Device Monitor).進入以下頁面:
選中所需要跟蹤的APP後,點擊倒數第二個按鈕。會彈出以下頁面
在這個頁面可以設置跟蹤項目。選完後點擊OK即開始跟蹤APP了。
Androidsystrace停止後就會根據上圖的設置生成trace.xml文件。打開trace.xml後可以觀察surfaceflinger存在很多空斷,分布不均勻。如果間隔時間大於16ms的話,則表示在這時間點已經發生丟幀現象了。
通過放大則可以找到具體是哪些方法耗時過長,從而定位到某個方法。
MethodProfiling
方法分析工具的使用
首先,還是和上面一樣,先打開DDMS.
點擊第六個按鈕即可開始進行MethodProfiling了。再次點擊,則是結束MethodProfiling並生成分析報告。
通過排查,我找到了自己寫的代碼
發現這個點擊事件需要執行41ms,明顯大於16ms,則表示在點擊事件裡發生了丟幀,產生了卡頓。
再貼一下我的點擊事件
寫了個三重循環,並將循環後的值賦給一個TextView。很明顯,這個三重循環是執行在UI線程裡的,而且非常耗時。運行時間肯定是大於16ms。如果將循環次數再次調高的話,APP是一定會ANR的,比卡頓更可怕。
所以,通過MethodProfiling我可以清晰的定位到哪個方法執行耗時過長。這樣,可以進行優化修改,達到性能優化的目的。
Activity生命周期經典圖解:按鍵對生命周期的影響:BACK鍵: 當我們按BACK鍵時,我們這個應用程序將結束,這時候我們將先後調用onPause()->on
之前有人在知乎提問:“怎麼計算apk的啟動時間?”: 利用Python或者直接用adb命令怎麼計算apk的啟動時間呢?就是計算從點擊圖標到apk完
有不少朋友為自己的手機鎖屏後設置了開鎖密碼,但如果忘記了手機解鎖圖案設置,不管是因為太過復雜,還是別的什麼原因,用上手機才是最重要的,下載吧小編就來分享一個
這是在網上找的,不過忘了在哪裡找的,經過很多比較測試,發現這個方法不會 oom,目前來看 我一直沒有遇過,今天才找到這個以前建立的工程,記錄下來:先給大家展示下效果圖:p