Android handler

Examples of using Android handler

There are two main uses for a Handler: (1) to schedule messages and runnables to be executed at some point in the future; and (2) to enqueue an action to be performed on a different thread than your own.

Handler

Post runnable to another thread

val handler = Handler(Looper.getMainLooper())
repeat(3) {
    Thread {
        val message = "Message from ${Thread.currentThread()}"
        handler.post {
            log("${Thread.currentThread()} is precessing the $message")
        }
    }.start()
}
Thread[main,5,main] is precessing the Message from Thread[Thread-3,5,main]
Thread[main,5,main] is precessing the Message from Thread[Thread-4,5,main]
Thread[main,5,main] is precessing the Message from Thread[Thread-5,5,main]

Post a runnable object and send a message

val callback = object : Handler.Callback {
    override fun handleMessage(msg: Message): Boolean {
        log("callback handleMessage ${msg.hashCode()} ${msg.data.getString("data_key")}")
        return false
    }
}
val handler = object : Handler(Looper.getMainLooper(), callback) {
    override fun handleMessage(msg: Message) {
        log("handler handleMessage ${msg.hashCode()} ${msg.data.getString("data_key")}")
    }
}

handler.post {
    log("Post runnable")
}

val message = Message.obtain().apply {
    this.data = Bundle().apply {
        putString("data_key", "Some useful data")
    }
}

handler.sendMessage(message)
Post runnable
callback handleMessage 263648415 Some useful data
handler handleMessage 263648415 Some useful data