Android CountDownLatch.await() преждевременно замораживает пользовательский интерфейс

Поэтому я запускаю несколько потоков с CountDownLatch.

Моя проблема в том, что когда я вызываю latch.await(), пользовательский интерфейс кажется зависшим, и даже команды пользовательского интерфейса, которые были вызваны заранее, не имеют никакого эффекта. например

btnShare.setVisibility(View.INVISIBLE);
prgSharing.setVisibility(View.VISIBILE);

latch.await()

Первые две строки не влияют на пользовательский интерфейс.

Любая идея, почему это и, возможно, решение? Благодарю.

2 ответа

Решение

Это, скорее всего, потому что вы блокируете UI-Thread прежде чем он может сделать Views снова. Я думаю, что вы должны смотреть на AsyncTask и, возможно, поставить свой wait логика в doInBackground() метод, или как-то переосмыслить вашу реализацию.

Если пользовательский интерфейс зависает, это потому, что вы звоните:

latch.await()

на UI Thread. Вы должны избегать блокирования вызова в потоке пользовательского интерфейса, так как это является причиной ANR

Другие вопросы по тегам