国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android 優化之卡頓優化的實現

Android 優化之卡頓優化的實現

2022-03-11 15:35七適散人 Android

這篇文章主要介紹了Android 優化之卡頓優化的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Android 系統每隔 16ms 會發出 VSYNC 信號重繪界面(Activity)。之所以是 16ms,是因為 Android 設定的刷新率是 60FPS(Frame Per Second),也就是每秒 60 幀的刷新率,約合 16ms 刷新一次。

這就意味著,我們需要在 16ms 內完成下一次要刷新的界面的相關運算,以便界面刷新更新。

假設我們更新屏幕的背景圖片需要 24ms 來做這次運算,當系統在第一個 16ms 時刷新界面,由于運算還沒有結束,無法繪出圖片。當系統隔 16ms 再發一次 VSYNC 信息重繪界面時,用戶才會看到更新后的圖片。也就是說 32ms 后才看到了這次刷新(并不是 24ms),這就是丟幀(dropped frame)。

丟幀給用戶的感覺就是卡頓,而且如果運算過于復雜,丟幀會更多,導致界面常常處于停滯狀態。

卡頓原因

過于復雜的布局

  • 界面性能取決于 UI 的渲染性能,UI 渲染的整個過程由 CPU 和 GPU 兩個部分協同完成。CPU 負責 UI 布局元素的 Measure、Layout、Draw 等相關運算執行,GPU負責柵格化(rasterization),將 UI 元素繪制到屏幕上。
  • 如果 UI 布局層次太深,或是自定義控件的 onDraw 中有復雜運算,CPU 的相關運算就可能大于 16ms,導致卡頓。

過度繪制

UI 線程的復雜運算

  • UI 線程的復雜運算會造成 UI 無響應,導致 ANR,但更多的是造成 UI 響應停滯卡頓,ANR 是卡頓的極致。

頻繁的 GC

優化方法

1、減少刷新次數

比如進度更新,要進度有變化再去刷新,且保證頻率不得高于系統的刷新頻率。

2、避免非必要的刷新

若控件不可見,則無需刷新。

3、避免后臺線程影響

如列表控件,在滑動時不要去加載圖片,可以在滑動監聽里停止圖片的加載。

4、局部刷新

如 RecyclerView 的 DiffUtil。自定義 View 可以使用下面兩個方法:

?
1
2
invalidate(Rect dirty);
invalidate(int left, int top, int right, int bottom);

5、盡量使用屬性動畫,它減少了自身的重繪。最后要清除

StringBuilder,List 等在創建時傳入一個合適的參數指定初始容量,以避免頻繁擴容的開銷。

6、開啟硬件加速

7、原理可見 Android硬件加速原理與實現簡介理解Android硬件加速原理的小白文

Application 級別

?
1
<application android:hardwareAccelerated="true" />

Activity 級別

?
1
<activity android:hardwareAccelerated="true" />

Window 級別

?
1
2
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

View 級別

?
1
2
3
// 如果是 software,會將 View 繪制到一個 Bitmap,
// 然后依然是通過硬件加速將 Bitmap 繪制到 Canvas
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
  • LAYER_TYPE_NONE:普通渲染方式,不會返回一個離屏的緩沖,默認值。
  • LAYER_TYPE_HARDWARE:如果這個應用使用了硬件加速,這個 View 將會在硬件中渲染為 硬件紋理,如果應用程序并沒有被硬件加速,則其效果和 LAYER_TYPE_SOFTWARE 相同。
  • LAYER_TYPE_SOFTWARE:此 View 通過軟件渲染為一個 Bitmap。

檢查是否開啟了硬件加速

?
1
2
view.isHardware-Accelerated();
Canvas.isHardwareAccelerated();

如果 View 中要處理中文長文本,需要關閉硬件加速。因為每個中文編碼不一樣,緩存效果不理想。

監控

  1. 《Android 應用性能優化最佳實踐》2.8 章,主要利用 MainLooper 里的 Printer。
  2. BlockCanary 開源庫
  3. StrctMode

ANR

Activity 的 View:5 秒無響應
BroadcastReceiver:10 秒無響應
Service:20 秒無響應

ANR 時,系統會生成一個 traces.txt 的文件放在 /data/anr/ 下。通過 adb 命令將其導出到本地

?
1
$adb pull data/anr/traces.txt ~/Desktop

UI 線程做耗時操作,內存泄露導致內存不足都可能產生 ANR。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.jianshu.com/p/5e508beffac8

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品乱子伦一区二区三区 | 日韩免费| 男人的天堂在线视频 | 亚洲91av| 亚洲日日摸夜夜夜夜夜爽小说 | 欧美激情五月 | 国产视频自拍一区 | 国产在线精品一区二区 | 伊人激情网 | 亚洲精品a | 日韩看片| 成年人在线视频 | 成人综合av | 久久综合一区二区 | 精品国产乱码久久久久久久 | 亚洲视频aaa | 国产精品久久久久久久久久ktv | 色噜噜狠狠狠综合曰曰曰88av | 亚洲欧美v国产一区二区 | 精品无码久久久久久国产 | 欧美午夜一区二区福利视频 | 91精品国产综合久久久久久丝袜 | 国产精品高清在线 | 欧美日韩综合一区 | 久久久久国产精品www | 免费国产黄色大片 | 亚洲精品久久久久久久久久久久久 | 黄色福利视频 | 黄色国产一级片 | 亚洲一区二区视频 | 久久久久久久免费观看 | 亚洲久草视频 | 在线国产视频 | 午夜激情在线 | 色爽| 精品国偷自产国产一区 | 久久精品国产久精国产 | 亚洲高清视频在线观看 | 亚洲一区二区免费看 | 日韩精品一区二区在线 | 国产成年人视频 |