Выполнение операций в потоке пользовательского интерфейса после задержки - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу реализовать некоторые операции в потоке пользовательского интерфейса с задержкой в ​​несколько секунд и попробовал этот подход -

final Handler handler1 = new Handler();
final Runnable r = new Runnable() {
public void run() {
// operations to do 
 }
};
runOnUiThread(new Runnable() {
 @Override
 public void run() {
 handler1.postDelayed(r, 1000);
 }
 });

Здесь у меня есть два запускаемых объекта, поэтому мой вопрос в том, что выполняемые здесь операции выполняются в потоке пользовательского интерфейса или в другом потоке, поскольку я не выполняю операции непосредственно в объекте Runnable потока пользовательского интерфейса. Также, если это неправильный подход к выполнению операций в потоке пользовательского интерфейса после задержки, предложите любые необходимые изменения.

1 Ответ

0 голосов
/ 01 ноября 2018

Когда вы публикуете Runnable с обработчиком, обработчик выполняет его в любом потоке, создавшем этот обработчик.

Конструктор обработчика по умолчанию new Handler() является синонимом new Handler(Looper.myLooper()). Это может означать, что обработчик будет выполнять Runnables в основном потоке, но только в том случае, если создание экземпляра произошло в основном потоке.

В любом случае, то, что вы делаете, является излишним. runOnUiThread() бесполезен. Просто измените конструктор обработчика:

final Handler handler1 = new Handler(Looper.getMainLooper());
handler1.postDelayed(r, 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...