Так что я делал много «однопоточных» приложений с Android и заметил, что вам действительно не нравится, что вы делаете это.
Поэтому я пытаюсь использовать ExecutorService и Future в моих интересах, но, несмотря на поиск ресурсов в сети, я изо всех сил пытаюсь правильно понять, как они работают.
Что мне нужно сделать, так это то, что мой поток пользовательского интерфейса запускает новый поток (мой rootInitThread). В этом потоке мне нужен мой ProjectManager для запуска другого потока, который снова запустит, скажем, 5 потоков, которые будут использоваться для заполнения в конечном итоге переменной HashMap (в данном случае, скажем, для этого нужно всего 5 записей).
Хотя это происходит в потоке инициализации ProjectManager, я бы хотел, чтобы rootInitThread продолжал выполнять другие действия, ожидая, пока ProjectManager завершит работу sh, и по завершении возьмет полученный HashMap и передаст его потоку пользовательского интерфейса, чтобы он мог получать информацию с карты.
Как только я пойму, как это сделать, я смогу на своем пути go и продолжить разработку того, что мне нужно, с помощью многопоточности.
Например, на данный момент мой Приложение выполняет следующие действия:
В MainActivity:
public void onCreate(Bundle saveInstanceBundle) {
ThreadPoolExecutor initExec = (ThreadPoolExecutor) Executors.newFixedThreaPool(5);
initExec.submit(() -> {
ProjectManager.getInstance().init();
});
Это выше работает, как я ожидал, и создает второй поток (мой поток инициализации)
Я просто не не знать, что нужно сделать в потоке инициализации ProjectManager, чтобы создать и заполнить HashMap и получить rootInitThread для продолжения и затем вернитесь, чтобы получить полученный HashMap ... Надеюсь, это имеет смысл?