Sobes.tech
Junior — Middle

Jaké metody lze použít k automatickému odhalení zpoždění v procesu vykreslování uživatelského rozhraní?

sobes.tech AI

Odpověď od AI

Pro automatické detekování zpoždění v procesu vykreslování uživatelského rozhraní na Androidu lze použít následující metody:

  • API Choreographer: Umožňuje sledovat snímky a měřit dobu jejich vykreslení, čímž identifikuje zpoždění snímků (jank).
  • Systrace: Profilovací nástroj, který ukazuje, jak dlouho trvá vykreslení každého snímku a kde dochází ke zpožděním.
  • Profile GPU Rendering: Aktivuje se v nastavení vývojáře a zobrazuje graf času vykreslení každého snímku.
  • API FrameMetrics (od Android 7.0): Umožňuje sbírat podrobné statistiky o čase vykreslení snímků.
  • StrictMode s monitorováním hlavního vlákna pro odhalení dlouhých operací blokujících UI.

Příklad použití Choreographer k měření času mezi snímky:

val choreographer = Choreographer.getInstance()
choreographer.postFrameCallback(object : Choreographer.FrameCallback {
    var lastFrameTimeNanos = 0L
    override fun doFrame(frameTimeNanos: Long) {
        if (lastFrameTimeNanos != 0L) {
            val frameDurationMs = (frameTimeNanos - lastFrameTimeNanos) / 1_000_000
            if (frameDurationMs > 16) { // 16ms ~ 60fps
                Log.w("FrameDelay", "Frame took $frameDurationMs ms")
            }
        }
        lastFrameTimeNanos = frameTimeNanos
        choreographer.postFrameCallback(this)
    }
})