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