Программирование
Детектор зависания основного потока SwiftUI
Это просто небольшой сниппет, который очень полезен для докладов о том, что ваш GUI-поток (основной поток/actor) зависает на значительное время.
Это просто небольшой сниппет, который очень полезен для докладов о том, что ваш GUI-поток (основной поток/actor) зависает на значительное время. Существует множество более тяжелых инструментов для анализа такого рода вещей, но я обнаружил, что этот простой монитор делает то, что мне нужно в большинстве случаев.
var body: some View {
SomeRootView {
…
}.task {
let approximateGranularity = Duration.milliseconds(10)
let threshold = Duration.milliseconds(50)
let clock = SuspendingClock()
var lastIteration = clock.now
while !Task.isCancelled {
try? await Task.sleep(for: approximateGranularity,
tolerance: approximateGranularity / 2,
clock: clock)
let now = clock.now
if now - lastIteration > threshold {
print("Main thread hung for \((now - lastIteration).formatted(.units(width: .wide, fractionalPart: .show(length: 2)))).")
}
lastIteration = now
}
}
}
Вы можете настроить два параметра — approximateGranularity и threshold — в соответствии со своими предпочтениями. Накладные расходы весьма незначительны с точки зрения использования процессора, но имейте в виду, что этот код заставляет основной поток часто просыпаться, так что это может оказать заметное и пагубное влияние на энергопотребление. Я рекомендую не использовать этот код в приложениях ваших пользователей.
Возможно, это само собой разумеется, но точка останова, установленная на операторе print, позволяет отлаживать более глубокие зависания. Однако и без этого сообщение в логе может быть полезным — часто вы не замечаете, что ваше приложение зависает, потому что в этот момент вы не активно взаимодействуете с ним. А вот ваши пользователи могут обращать на это внимание.
-
Аналитика магазинов4 недели назад
Мобильный рынок Ближнего Востока: исследование Bidease и Sensor Tower выявляет драйверы роста
-
Видео и подкасты для разработчиков3 недели назад
Разбор кода: iOS-приложение для управления личными финансами на Swift. Часть 1
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.47
-
Разработка4 недели назад
100 уроков о том, как я довёл своё приложение до продажи за семизначную сумму

