앱 속도 개선을 위해서 스레드 쪽으로 알아보다가 ThreadPoolExecutor 를 알게 되었습니다. 앱 초기 로딩 과정에서 Executors.newFixedThreadPool(3) 를 호출, 3개의 스레드를 활용해 속도 개선을 이룬 상황이고요. 질문은 두 가지 입니다.
ExecutorService 의 shutdown() 을 호출하면 더이상 작업을 받지 않는다고 하던데 스레드도 반납을 해버려서 다시 작업을 하려면 Executors.newFixedThreadPool() 호출부터 시작해야 하는 상태인 건가요? 아니면 작업을 재개하는 다른 방법이 있는 것인지 질문드립니다. 그리고 다음의 질문은 첫 번째 질문의 답이 전자라고 가정하고 작성한 질문입니다.
스레드는 생성과 회수 단계에서 비용이 많이 발생해서 잘못 남용할 경우 오히려 느려질 수 있다고 하는데, 그렇다면 매번 필요할 때 마다 Executors.newFixedThreadPool(3) 호출해 작업 스레드를 새로 구성하지 않고, 애초에 클래스 변수로 선언하거나 액티비티 간에 전달 해주거나 하면서 앱 이쪽 저쪽에 사용해보려고 합니다. 앱 종료 시에 onDestroy()에서 shutdown() 하는 식으로요. 이런 방법에 발생할만한 문제가 있을까요? 권장할만한 방식인지 궁금합니다.