본문 바로가기
문서번역/안드로이드

[문서번역] thread를 사용한 성능 향상시키기

by 혀나Lee 2019. 8. 12.

해당 페이지는 안드로이드 개발 문서 Better performance through threading의 번역본입니다.


thread를 사용한 성능 향상시키기

Android에 thread를 사용하면 당신의 앱의 성능을 향상키실 수 있습니다. 이 페이지는 thread를 사용할 수 있는 몇 가지 양상에 대해 설명하고 있습니다. : UI 또는 메인 thread 작업; 앱의 생명주기와 thread 운선순위의 관계 그리고 thread 복잡성을 관리하는데 도움이 되는 플랫폼이 제공하는 방법. 이러한 영역 안에서 이 페이지는 잠재적인 함정과 그것들을 피하기 위한 전략들에 대해 설명하고 있습니다.

메인 thread

사용자가 당신의 앱을 시작할 때, Android는 실행 thread와 함께 새로운 Linux 프로세스를 생성합니다. 이 (UI thread라고 알려져 있는) 메인 thread는 스크린에서 발생하는 모든 것에 반응합니다. 이 동작이 어떻게 일어나는지에 대해 이해하는 것은 최적의 성능을 위해 메인 thread를 사용하도록 당신의 앱을 설계 할 수 있습니다.

내부

메일 thread는 매우 간단하게 설계되어 있습니다. 앱이 종료될 때까지 thread-safe 한 대기열에서 작업 블록을 받고 실행합니다. 이 프레임워크는 다양한 장소에서 이러한 작업의 블록을 생성합니다. 이러한 장소들은 생명주기 정보, input과 같은 사용자 이벤트 또는 다른 앱 과 프로세스에서 오는 이벤트와 연관된 콜백을 포함합니다. 게다가 이 프레임워크 사용 없이 앱은 명시적으로 블럭을 큐에 넣을 수 있습니다.

 

거의 당신의 앱을 실행하는 어떠한 블럭은 input, layout inflation, 또는 draw와 같은 이벤트 콜백으로 묶여있습니다. 무엇인가 이벤트를 발생시킬때, 이벤트가 발생한 thread가 이벤트 자체를 밀어내고, 메인 thread의 메시지 큐에 넣습니다. 그러면 메인 thread는 이벤트를 서비스 할 수 있습니다.

 

애니메이션 또는 스크린이 업데이트가 발생하는 동안, 시스템은 1초에 60프레임으로 매끄럽게 렌더링하기위해 16ms 마다 (스크린을 그리는 일을 하는) 작업 블록을 실행하려 합니다. 시스템이 이 목표에 도달하기 위해서, UI/View 계층을 메인 thread 위에서 업데이트해야합니다. 그러나, 메인 thread의 메시지 큐가 충분히 빠르게 업데이트를 완료하기 위해 메인 thread를 위한 수많은 또는 매우 긴 작업을 포함하고 있을 때, 그 앱은 작업 thread로 이 작업을 움직일 수 있습니다. 메인 thread가 16ms 이내에 작업 블록의 실행을 완료할 수 없다면 사용자는 입력에 대한 히치, 지연 또는 UI 응답 부족을 관찰 할 수 있습니다. 메인 thread가 대략 5초 동안 차단되었다면 그 시스템은 사용자가 바로 앱을 종료시킬 수 있도록 하는 Application Not Responding (ANR) 다이얼로그를 보여줍니다.

 

부드러운 렌더링과 사용자 입력에 대한 빠른 응답을 방해하지 않도록, 수많은 또는 긴 작업을 메인 thread로 부터 움직이는 것은 당신의 앱에서 thread를 선택하는 가장 큰 이유입니다.

댓글