常日好讀書,晚年學垂綸。html
60fps:畫面每秒刷新60次,一幀的時間就是1/60 ~=16.67msandroid
刷新率:每秒屏幕刷新次數,如今大部分手機屏幕的刷新率是60HZ 幀率:GPU在一秒內繪製的幀數。git
現階段,Android的幀率是60fps(16.67ms繪製一次),而手機的屏幕刷新率是60HZ(16.67ms刷新一次),因此目前的Android手機基本是這個配置,目前階段的最優解。github
Android系統每16ms發出VSYNC信號,觸發GPU對UI渲染,若是你的耗時是20ms,系統在獲得VSYNC信號的時候因爲還沒準備好,就沒法進行更新任何內容,那麼用戶在32ms內看到的是同一幀畫面,就丟幀了,會有卡頓現象。性能優化
Android Studio 4.0 Gradle version 6.1.1 Android API version 30markdown
public void onFramesLossMonitor(View view) {
Log.d(TAG, "onFramesLossMonitor: ");
startAnimator();
}
private void startAnimator() {
Log.d(TAG, "startAnimator: ");
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1f);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mMonitorBgView.setAlpha((float) animation.getAnimatedValue());
monitorDoSomeThings();
}
});
valueAnimator.setDuration(500);
valueAnimator.start();
}
private void monitorDoSomeThings() {
Log.d(TAG, "monitorDoSomeThings: ");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
Log.d(TAG, "writeSomething: ");
}
}
複製代碼
按照 上篇 講述的方法,導出html文件報表,找到對應包名的進程,查看Frames
,代表有卡頓(丟幀)。
綠色:< 1* vsync
黃色:1 * vsync ~ 2 * vsync之間
紅色:> 2 * vsync
ide
打開運行的systrace結果報表:oop
鍵盤快捷鍵:
W :放大跟蹤時間軸
A :在跟蹤時間軸上向左平移
S :縮小跟蹤時間軸
D :在跟蹤時間軸上向右平移
E :以當前鼠標位置爲中定位跟蹤時間軸
M :高亮當前選區
post
界面管道顏色說明:
灰色:正在休眠。
藍色:可運行(它能夠運行,可是調度程序還沒有選擇讓它運行)。
綠色:正在運行(調度程序認爲它正在運行)。
紅色:不可中斷休眠(一般在內核中處於休眠鎖定狀態)。能夠指示 I/O 負載,在調試性能問題時很是有用。
橙色:因爲 I/O 負載而不可中斷休眠。
性能
點擊單幀詳情,會提示卡頓的詳細信息以及建議。
荷花宮樣美人妝,荷葉臨風翠做裳
❤ 比心 ❤