Этот вопрос аналогичен вопросу о
Handler.post(). Handler.post() выполняется асинхронно и для синхронного выполнения предлагается проверять текущий поток. В runOnUiThread() есть эта проверка. Если текущий поток – это UI тред, то параметр-runnable запускается сразу. Иначе выполнение делегируется в
mHandler.post(), где mHandler – это хэндлер, созданный на UI потоке.