Skip to content Skip to sidebar Skip to footer

Having A Timer Use The Main Thread In Kotlin

I have an operation that needs to be delayed for a few seconds. I am using the scheduler and timer like so: import java.util.Timer import kotlin.concurrent.timerTask val timer =

Solution 1:

You can use an Handler which when declared from the Main Thread(eg. in the Activity) will be attached to it,

You could try this :

valdelayedHandler= Handler()
delayedHandler.postDelayed({
//// Your Code
}, 2000)

Or you can also keep your Timer, simply declare a Handler outside the timer, and use the Handler post() Method from your Timer

Solution 2:

You can extend timerTask to return on the main thread. Basically, get a Hander that runs on the main thread:

Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
     publicvoidrun() {
          // UI code goes here
     }
});

Then have timerTask execute its function parameter in the run method above. Alternatively, you can just have that code in you lambda or even use activity.runOnUiThread(). Really the correct solution comes down to how often you do this in your code, of it's a one off just use runOnUiThread.

Solution 3:

Although the previous answers are working, they are not very kotlin

Way nicer is something like this

Handler(mainLooper).post { someTextView.text = "Hello world!" }

Post a Comment for "Having A Timer Use The Main Thread In Kotlin"