@felix 
Для создания секундомера с использованием Handler в Kotlin, вы можете использовать следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54  | 
class Stopwatch { private var startTime: Long = 0 private var elapsedTime: Long = 0 private var isRunning: Boolean = false private val handler = Handler() private val tick = object : Runnable { override fun run() { val now = System.currentTimeMillis() elapsedTime += now - startTime startTime = now val minutes = (elapsedTime / 1000) / 60 val seconds = (elapsedTime / 1000) % 60 val milliseconds = elapsedTime % 1000 val time = String.format("%02d:%02d:%03d", minutes, seconds, milliseconds) onTickListener?.onTick(time) handler.postDelayed(this, INTERVAL) } } private var onTickListener: OnTickListener? = null fun start() { if (!isRunning) { startTime = System.currentTimeMillis() handler.post(tick) isRunning = true } } fun stop() { if (isRunning) { handler.removeCallbacks(tick) isRunning = false } } fun reset() { elapsedTime = 0 onTickListener?.onTick("00:00:000") } fun setOnTickListener(listener: OnTickListener) { onTickListener = listener } interface OnTickListener { fun onTick(time: String) } companion object { private const val INTERVAL = 10L // update interval in milliseconds } }  | 
Этот класс предоставляет методы start(), stop() и reset(), чтобы запускать, останавливать и сбрасывать секундомер. Он также определяет интерфейс OnTickListener, который позволяет уведомлять слушателей о прошедшем времени в определенные моменты времени.
Чтобы использовать класс Stopwatch, создайте экземпляр класса и установите слушатель для обработки событий тика:
1 2 3 4 5 6 7 8  | 
val stopwatch = Stopwatch() stopwatch.setOnTickListener(object : Stopwatch.OnTickListener { override fun onTick(time: String) { // обновлять UI с текущим временем } }) stopwatch.start() // запуск секундомера  | 
Этот код запустит секундомер и обновляет UI каждые 10 миллисекунд с текущим временем, используя метод onTick() слушателя. Вы можете настроить интервал обновления, изменив значение константы INTERVAL в классе Stopwatch.
@felix 
Вот пример того, как можно использовать класс Stopwatch для создания секундомера и отображения времени в TextView:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  | 
class MainActivity : AppCompatActivity() {
    private lateinit var stopwatch: Stopwatch
    private lateinit var timeTextView: TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        timeTextView = findViewById(R.id.timeTextView)
        stopwatch = Stopwatch()
        stopwatch.setOnTickListener(object : Stopwatch.OnTickListener {
            override fun onTick(time: String) {
                runOnUiThread {
                    timeTextView.text = time
                }
            }
        })
        findViewById<Button>(R.id.startButton).setOnClickListener {
            stopwatch.start()
        }
        findViewById<Button>(R.id.stopButton).setOnClickListener {
            stopwatch.stop()
        }
        findViewById<Button>(R.id.resetButton).setOnClickListener {
            stopwatch.reset()
        }
    }
}
 | 
В этом коде создается MainActivity, в котором инициализируется класс Stopwatch и устанавливается слушатель для обновления текстового поля timeTextView с текущим временем. Также добавлены кнопки для запуска, остановки и сброса секундомера.
Не забудьте добавить разметку для activity_main.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46  | 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/timeTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:text="00:00:000"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"/>
    <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start"
        android:layout_below="@id/timeTextView"
        android:layout_marginTop="16dp"/>
    <Button
        android:id="@+id/stopButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Stop"
        android:layout_toEndOf="@id/startButton"
        android:layout_marginStart="16dp"
        android:layout_below="@id/timeTextView"
        android:layout_marginTop="16dp"/>
    <Button
        android:id="@+id/resetButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Reset"
        android:layout_toEndOf="@id/stopButton"
        android:layout_marginStart="16dp"
        android:layout_below="@id/timeTextView"
        android:layout_marginTop="16dp"/>
</RelativeLayout>
 | 
Этот код позволит вам создать секундомер с handler на Kotlin в вашем Android-приложении.