2016-07-04 2 views
1

Gmail API를 사용하여 사용자의 이메일을 동기화하는 Android 애플리케이션을 개발 중입니다.Android - 여러 스레드를 병렬로 실행하는 방법

이렇게하려면 처음에는 읽지 않은 전자 메일을 다운로드하고 두 번째는 읽기 전자 메일을 다운로드하는 두 가지 서비스를 구현했습니다. 각 서비스는 Runnable 인터페이스를 구현하고 전자 메일을 검색하고 데이터베이스에 저장하는 코드는 Run() 메서드 내의 스레드를 사용하여 처리됩니다.

모든 것이 잘 작동합니다. 유일한 문제는 내가 가지고있는 유일한 문제는 읽기 전자 메일 다운로드를 담당하는 스레드가 실행 중일 때 (다른 스레드보다 오래 걸림) 두 번째 스레드 (읽지 않은 전자 메일 동기화)가 첫 번째 스레드가 완료 될 때까지 차단된다는 것입니다.

어쨌든 첫 번째 스레드가 우선 실행될 때마다 두 번째 스레드의 우선 순위를 지정할 수 있는지 알고 싶습니다. 두 번째 스레드가 실행될 때마다 코드는 두 번째 스레드를 대기 상태로 두어야합니다. 첫 번째 (읽지 않은 전자 메일)가 실행을 완료 한 다음 스레드를 보류 상태로 다시 시작합니다.

감사합니다.

답변

3

짧은 시간 동안 실행되는 두 번째 서비스를 만들려면 AsyncTask를 배우고 싶습니다.하지만 지속적으로 실행되는 서비스를 만들려면 java.util을 사용해야합니다. .concurrent API (Executor, ThreadpoolExecutor). 내가 도와 주길 바래다. 그러나 몇 가지 수치를 통해 멀티 스레드 응용 프로그램에 대한 지식을 얻을 수 있습니다. 더 많은 도움이 필요하면 알려주세요!

+0

실제로 Read 이메일을받는 스레드는 매 1 시간마다 실행해야하지만 UnRead 전자 메일을 받기위한 다른 스레드는 매 1 분마다 실행해야합니다. 이제 내 코드가 1 분 스레드를 실행 한 다음 다른 하나를 실행 (훨씬 오래 걸림). 문제가 더 오래 걸리면 더 짧은 코드가 실행될 준비가되었고 첫 번째 코드가 끝날 때까지 기다려야합니다. 그건 내가 원하는 것이 아니야. 나는 더 짧은 것을 달리고 끝날 때까지 더 길게 하나를 보류하고 싶다. 그게 가능하니? 그렇다면 어떻게? 고맙습니다. –

+1

매시간 이메일 읽기를 다운로드하는 프로세스가 실행되는 것 같습니다. 많은 데이터를 낭비합니다. 대신 버튼 클릭으로 오래된 이메일 다운로드 스레드를 시작하는 것이 좋습니다. 하지만 당신이 시작한 논리를 따르는 경우 ExecutorService를 시험해보고 속성을 함부로 다루는 것이 좋습니다. 해결책을 찾을 수 있습니다! –

+0

버튼 클릭으로 오래된 이메일을 다운로드하는 것은 좋은 생각이지만 사용자가 이메일을 너무 많이 보내면 (UI를 완료하고 업데이트하는 데 너무 오래 걸릴 것입니다.) 어쨌든 감사합니다. ExecutorService를 사용하여 내 문제를 처리하는 방법에 대한 스 니펫 코드를 게시 할 수 있습니까? 많은 감사. –

관련 문제