progressBar блокируется потоком android

 progressBar.setVisibility(ProgressBar.VISIBLE);
    ConnectedClass connectedClass = ConnectedClass.createInstance(devToConnect.getPairBluDev(), mHandler);
    ConnectedClass.createInstance(devToConnect.getPairBluDev(), mHandler);
    connectedClass.start();

    connectedClass.join();

Мне нужно чтоб прогресс бар просто крутился пока выполняется задача в connectedClass, я его сделал отдельным поток специально чтоб освободить основной поток. Но progressBar всё равно появляется только после выполнение операции в потоке. connectedClass.join()- я ставлю так как мне нужно ждать результата чтоб проверить его уже в главном потоке. Какими способами я могу заставить его просто крутиться пока не закончится выполнение другого потока? Я проверял два потока работают.


Ответы (1 шт):

Автор решения: AdisAlagic

Для того, чтобы не блокировать основной поток, рекомендуется использовать асинхронные потоки.

Суть асинхронных потоков в использовании callback'ов, которые по завершению будут вызываться в конце работы. Для того, чтобы это сделать, создайте простой интерфейс:

interface ConnectivityResultListener{
   void onDone();
}

Вы можете дополнить этот интерфейс аргументами, если это необходимо, например, для получения результата работы API.

Далее, нужно прописать конец задачи. Сделать это можно так, например:

public void start(ConnectivityResultListener listener){
   //Ваш код
   listener.onDone();
}

И просто использовать это. Например, вот так:

progressBar.setVisibility(ProgressBar.VISIBLE);
ConnectedClass connectedClass = 
ConnectedClass.createInstance(devToConnect.getPairBluDev(), mHandler);
connectedClass.start(() -> {
   progressBar.setVisibility(ProgressBar.GONE);
});
→ Ссылка