tgoop.com/mobileproglib/6152
Create:
Last Update:
Last Update:
Проблема
Пользователи удаляют приложения из-за:
• Долгой загрузки экранов
•Подвисаний интерфейса
•Высокого потребления батареи
Мониторинг производительности помогает выявлять и исправлять проблемы до того, как они повлияют на рейтинг приложения.
• Время запуска приложения (Cold/Warm/Hot start)
• Частота кадров (FPS) на основных экранах
• Потребление памяти (RAM)
• Использование CPU и батареи
• Скорость загрузки данных (сеть)
1. Firebase Performance Monitoring (Android/iOS)
// Android: добавьте в build.gradle
implementation 'com.google.firebase:firebase-perf:20.5.1'
// iOS: добавьте в Podfile
pod 'FirebasePerformance'
2. Создание кастомных трейсов:
// Android
val trace = Firebase.performance.newTrace("screen_load")
trace.start()
// Выполнение работы...
trace.stop()
// iOS
let trace = Performance.startTrace(name: "screen_load")
// Работа...
trace.stop()
3. Отслеживание скорости загрузки экрана:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val trace = Firebase.performance.newTrace("main_activity_create")
trace.start()
setContentView(R.layout.activity_main)
// Инициализация UI
trace.stop()
}
}
Android (Choreographer)
class FpsMonitor : Choreographer.FrameCallback {
private var frameCount = 0
private var startTime = 0L
override fun doFrame(frameTimeNanos: Long) {
if (startTime == 0L) {
startTime = frameTimeNanos
}
frameCount++
val elapsed = (frameTimeNanos - startTime) / 1_000_000
if (elapsed >= 1000) {
val fps = (frameCount * 1000 / elapsed).toFloat()
// Отправка метрики
frameCount = 0
startTime = frameTimeNanos
}
Choreographer.getInstance().postFrameCallback(this)
}
}
iOS (CADisplayLink)
class FpsMonitor {
private var displayLink: CADisplayLink?
private var lastTimestamp: CFTimeInterval = 0
private var frameCount: Int = 0
func startMonitoring() {
displayLink = CADisplayLink(target: self, selector: #selector(step))
displayLink?.add(to: .main, forMode: .common)
}
@objc func step(displayLink: CADisplayLink) {
if lastTimestamp == 0 {
lastTimestamp = displayLink.timestamp
return
}
frameCount += 1
let delta = displayLink.timestamp - lastTimestamp
if delta >= 1 {
let fps = Double(frameCount) / delta
// Отправка метрики
frameCount = 0
lastTimestamp = displayLink.timestamp
}
}
}
• Firebase Console – готовые графики и отчеты
• Custom dashboards – Grafana, Data Studio
• Оповещения – при падении FPS ниже 50 или росте потребления памяти
• Мониторьте в продакшене – реальные данные пользователей
• Сегментируйте данные – по устройствам, версиям ОС, сетям
• Установите целевые показатели – например, 60 FPS, холодный запуск < 2 сек
#буст