Когда вы публикуете Runnable с обработчиком, обработчик выполняет его в любом потоке, создавшем этот обработчик.
Конструктор обработчика по умолчанию new Handler()
является синонимом new Handler(Looper.myLooper())
. Это может означать, что обработчик будет выполнять Runnables в основном потоке, но только в том случае, если создание экземпляра произошло в основном потоке.
В любом случае, то, что вы делаете, является излишним. runOnUiThread()
бесполезен. Просто измените конструктор обработчика:
final Handler handler1 = new Handler(Looper.getMainLooper());
handler1.postDelayed(r, 1000);