Sobes.tech
Junior — Middle

Kokias metodas galima naudoti automatiškai aptikti vėlavimus vartotojo sąsajos atvaizdavimo procese?

sobes.tech AI

Atsakymas iš AI

Norint automatiškai aptikti vėlavimus naudotojo sąsajos atvaizdavimo procese „Android“, galima naudoti šiuos metodus:

  • API Choreographer: leidžia stebėti kadrus ir matuoti jų atvaizdavimo laiką, identifikuojant vėlavimus (jank).
  • Systrace: profilavimo įrankis, kuris rodo, kiek laiko užtrunka kiekvieno kadro atvaizdavimas ir kur įvyksta vėlavimai.
  • Profile GPU Rendering: įjungiamas kūrėjų nustatymuose ir rodo kiekvieno kadro atvaizdavimo laiką grafike.
  • API FrameMetrics (nuo Android 7.0): leidžia rinkti išsamią statistiką apie kadrų atvaizdavimo laiką.
  • StrictMode: stebint pagrindinį srautą, galima aptikti ilgai trunkančias operacijas, blokuojančias UI.

Pavyzdys, kaip naudoti Choreographer, norint išmatuoti laiką tarp kadrų:

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)
    }
})