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 шт):
Для того, чтобы не блокировать основной поток, рекомендуется использовать асинхронные потоки.
Суть асинхронных потоков в использовании 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);
});