Log.d("TAG", "2")
выполняется в том же треде, что и код Log.d("TAG", "1")
. Вопрос заключается в том, будет ли код, в методе
post()
вызван синхронно, в момент вызова post()
, или будет добавлен в очередь сообщений и запущен после отработки текущего метода. В первом случае вывод в лог будет "2 1", во втором "1 2".Ответ: объект
Runnable
, переданный в метод post()
, добавляется в очередь сообщений в любом случае, т.е. вывод будет "1 2".Если требуется выполнять код метода
post()
синхронно, в случаях когда метод вызван на том же потоке, можно написать следующую extension-функцию:fun Handler.postOrRun(runnable: Runnable) {
if (looper.isCurrentThread) {
runnable.run()
} else {
post(runnable)
}
}