실행자 인스턴스에 제출하는 세 가지 태스크가 있습니다. 동기화 프로세스가 끝났음을 알리는 두 가지 작업을 알려야합니다. 그래서 나는이핸들러 스레드에서 결과를 얻을 때까지 기다리십시오.
공용 클래스 SyncManager {
Handler syncHandler; public SyncManager() { initHandler(); } private void initHandler() { HandlerThread ht = new HandlerThread("syncHandler"); ht.start(); syncHandler = new Handler(ht.getLooper()) { private ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(3); public void handleMessage(Message msg) { Future future1 = executor.submit(new ImageRetrieverTask()); Future future2 = executor.submit(new FileRetrieverTask()); Future future3 = executor.submit(new AudioRetrieverTask()); try { Object result1 = future1.get(); Object result2 = future2.get(); Object result3 = future3.get(); // Here i can use EventBus to notify observers of the completion of the sync } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }; }; } public void performSync() { syncHandler.sendEmptyMessage(1); } }
SyncManager 클래스가 할당되면, 핸들러는 초기화처럼 그것을 달성했다. performSync 메서드가 호출되면 기본적으로 처리기에 메시지를 보내 모든 동기화 관련 작업을 실행자에 추가하여 실행할 수 있도록합니다. 핸들러는 EventBus를 통해 알림을 전달할 수 있도록 선물이 끝날 때까지 기다리는 백그라운드 루프입니다. 처리기는 그래서 내가 백그라운드 스레드에서 기다릴 수 있습니다.
나는이 일을 해커가 된 것처럼 느낍니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
도움을 주시면 대단히 감사하겠습니다. 감사합니다.
를 호출하여 완료 될 때까지 기다릴 수
ThreadPoolExecutor
재사용하지 않습니다. 자세한 내용은이 블로그를 참조하십시오 : https://www.captechconsulting.com/blogs/getting-started-with-rxjava-and-android –