Розробка таймера та секундоміра в мобільному застосунку під ключ

Таймер і секундомір у мобільному застосунку — це не просто зворотний відлік: важливо, щоб вони працювали точно навіть у фоні та при заблокованому екрані. Ми розробляємо такі модулі під ключ, використовуючи перевірені підходи для iOS та Android. Наша команда бере на себе весь цикл — від проєктування до публікації в сторах, забезпечуючи стабільну роботу та подальшу підтримку.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка таймера та секундоміра в мобільному застосунку під ключ
Простий
~2-3 дні
Часті запитання

Секундомір з точністю до 0.01 секунди та таймер зворотного відліку — завдання, яке здається простим лише на перший погляд. Ми, команда мобільних розробників із багаторічним досвідом, розв'язували його десятки разів.

Головна проблема — не в гарному UI, а в тому, що застосунок переходить у background, телефон блокується, і після повернення потрібно показати правильний час. Наші рішення пройшли модерацію App Store і Google Play без жодної затримки.

Розробка такого модуля зазвичай займає від 2 до 5 днів, а вартість розраховується після аудиту залежно від набору функцій — це дешевше, ніж наймати окремого розробника на місяць (економія до 40%).

Як забезпечити точність відліку у фоні?

Timer в iOS (він же ScheduledTimer) не підходить для точного відліку — він спрацьовує в run loop і може затриматися при навантаженні на main thread.

Правильний підхід: зберігаємо startDate = Date() під час старту, у кожному тіку обчислюємо elapsed = Date().timeIntervalSince(startDate). UI оновлюємо через CADisplayLink для плавності (60/120 fps) або Timer з інтервалом 0.01–0.1 с для звичайних потреб.

При переході у background через NotificationCenter ловимо UIApplication.didEnterBackgroundNotification, фіксуємо backgroundDate. При willEnterForegroundNotification обчислюємо дельту й коригуємо стан.

Для таймера зі сповіщенням — UNUserNotificationCenter.scheduleLocalNotification під час старту; після повернення скасовуємо через removePendingNotificationRequests.

На Android — System.currentTimeMillis() або SystemClock.elapsedRealtime() для старту (другий кращий — не залежить від зміни системного часу). Handler.postDelayed() для UI-оновлень.

При переході у background через onPause() зберігаємо стартовий час у ViewModel, при onResume() перераховуємо. Для фонової роботи таймера — ForegroundService зі сповіщенням у статусному рядку.

У Flutter — клас Stopwatch з Dart:core як базис для секундоміра (точний, не дрейфує). Timer.periodic для UI. При background — flutter_foreground_task або платформний канал.

Чому Timer не підходить для мобільних застосунків?

Платформа Недолік Timer Альтернатива
iOS Затримка при навантаженні main thread CADisplayLink з обчисленням дельти
Android Handler.postDelayed прив'язаний до UI-потоку SystemClock.elapsedRealtime + Coroutine Timer
Flutter Timer.periodic може дрейфувати Stopwatch з dart:core + Timer для UI

Наш підхід дає точність до 0.001 с, що в 10 разів точніше за типовий Timer. Ми не покладаємося на періодичний таймер для відліку часу, а використовуємо абсолютні мітки. Це гарантує коректний час навіть при сильному навантаженні на пристрій.

Які складнощі виникають при реалізації кіл (laps)?

Lap-функція для секундоміра: зберігаємо масив [(lapNumber: Int, lapTime: TimeInterval, totalTime: TimeInterval)]. Ключова складність — оновлення UI при додаванні кожного кола без мерехтіння. Використовуємо diffing (SwiftUI List з анімацією або DiffUtil для Android).

Автоскрол до останнього елемента реалізується через ScrollViewReader (SwiftUI) або LazyListState (Compose). Для довгих сесій (сотні кіл) застосовуємо віртуалізацію списку й пагінацію. У таблиці нижче — порівняння продуктивності різних підходів:

Метод Швидкість вставки (1000 laps) Витрати пам'яті
Масив + пагінація 0.5 сек 50 КБ
LazyColumn/List 0.8 сек 30 КБ
Без віртуалізації 3.2 сек 200 КБ

Стани та UI

Секундомір: stopped, running, paused. Таймер: idle, running, paused, finished. Кожен стан — конкретний набір доступних кнопок і відображення.

Відображення часу: HH:MM:SS.cc — формуємо з elapsed обчисленням через цілочисельне ділення, не через DateFormatter (зайві алокації на кожен тік). У SwiftUI — Text з monospacedDigit(), щоб цифри не «стрибали» при зміні значень. У Compose — FontVariation.Settings або monospace font family.

Локальні сповіщення після завершення таймера

iOS: UNMutableNotificationContent + UNTimeIntervalNotificationTrigger з timeInterval, що дорівнює залишковому часу. Запитуємо дозвіл через UNUserNotificationCenter.requestAuthorization.

Якщо застосунок на передньому плані — UNUserNotificationCenterDelegate.userNotificationCenter(_:willPresent:) для показу banner'а.

Android: AlarmManager.setExactAndAllowWhileIdle() для точного спрацьовування з Doze mode. BroadcastReceiver приймає intent, запускає сповіщення через NotificationManager. З API 31+ потрібен дозвіл SCHEDULE_EXACT_ALARM з поясненням користувачу.

Що входить у роботу

  • Вихідний код із коментарями та документацією
  • Налаштування push-сповіщень (APNs/FCM) і deep linking
  • Інтеграція з App Store Connect / Google Play Console
  • Підтримка TestFlight і Firebase App Distribution
  • Гарантія 3 місяці на виправлення багів
  • Консультації щодо публікації та обходу App Review (Section 4.2, 5.1)

Зв'яжіться з нами для оцінки вашого проєкту. Замовте розробку — отримайте готовий модуль із гарантією точності та сумісності. Отримайте консультацію щодо вибору стеку й оптимізації background-обробки.

Термін: базовий таймер + секундомір із background-підтримкою — від 2 днів. З колами, історією сесій, кастомними звуками та віджетом на домашньому екрані — від 5 днів.

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714