Could someone show me what is wrong?
I try to use a Handler
post a Runnable
but it's not execute
var mHandler: Handler? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mHandler = Handler()
var runnable = Runnable {
Log.d("TEST", "++++ runable")
Log.d("TEST", "++++ come end")
}
Log.d("TEST", "++++ runnable" + runnable)
Log.d("TEST", "++++ handle" + mHandler)
mHandler!!.post { runnable }
}
This is output
09-21 00:56:04.067 4419-4419/? D/TEST: ++++ runnablecom.vpioneer.activity.MainActivity$onCreate$runnable$1@529b8fb4 09-21 00:56:04.067 4419-4419/? D/TEST: ++++ handleHandler (android.os.Handler) {529b8cb4}
First at all, don't use !!
operator, it is a very bad practice (from the doc). With ?
you will reach the same behaviour but checking if the instance became null before executing it.
Saying this, using:
mHandler?.post { runnable }
You are actually creating a new lambda containing runnable line. see here below in a more readable way:
mHandler?.post {
runnable
}
This is the equivalent in Java:
mHandler.post(new Runnable(){
public void run(){
runnable;
}
});
To solve this:
Option 1: getting rid of the runnable declaration
mHandler?.post { /*the content of your runnable*/ }
Option 2: using your runnable instance
mHandler?.post(runnable) // normal parentheses
Option 3: crazy way
mHandler?.post { runnable.run() }
Try this code, I hope this is working
Handler().postDelayed({
// You code and delay time
}, 1000L)
You are not starting runnbale
. Try this:
mHandler!!.post { runnable.run() }
This is also valid:
mHandler!!.post {
Log.d("TEST", "++++ runable")
Log.d("TEST", "++++ come end")
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With