Android에서 다중 스레드 작업에 대해 자세히 알아보려면 프로세스 및 스레드 개요 가이드를 참조하세요. 좋은 사용자 환경을 제공하려면 Android 응용 프로그램에서 실행 속도가 느린 모든 작업을 비동기적으로 실행해야 합니다. 이것은 자바 언어 또는 안드로이드 프레임 워크의 동시성 구문(s)을 통해 보관할 수 있습니다. 잠재적으로 느린 작업은 네트워크, 파일 및 데이터베이스 액세스 및 복잡한 계산과 같습니다. 위에서 설명한 단일 스레드 모델 때문에 UI 스레드를 차단하지 않는 응용 프로그램의 UI의 응답성에 매우 중요합니다. 즉각적이지 않은 작업을 수행하는 작업이 있는 경우 별도의 스레드(“백그라운드” 또는 “작업자” 스레드)에서 수행해야 합니다. 스레드와 Runnable은 자체적으로 제한된 전력만 있는 기본 클래스입니다. 대신 처리기 스레드, AsyncTask 및 IntentService와 같은 강력한 Android 클래스의 기초가 됩니다. 스레드 및 실행 가능한 클래스 ThreadPoolExecutor의 기초이기도 합니다. 이 클래스는 스레드 및 작업 큐를 자동으로 관리하며 여러 스레드를 병렬로 실행할 수도 있습니다. 이를 사용하려면 AsyncTask를 하위 클래스로 만들고 백그라운드 스레드 풀에서 실행되는 doInBackground() 콜백 메서드를 구현해야 합니다.

UI를 업데이트하려면 doInBackground()의 결과를 제공하고 UI 스레드에서 실행되는 onPostExecute()를 구현하여 UI를 안전하게 업데이트할 수 있도록 해야 합니다. 그런 다음 UI 스레드에서 execute()를 호출하여 작업을 실행할 수 있습니다. 마찬가지로 콘텐츠 공급자는 다른 프로세스에서 발생하는 데이터 요청을 받을 수 있습니다. ContentResolver 및 ContentProvider 클래스는 프로세스 간 통신이 관리되는 방식에 대한 세부 정보를 숨기지만, 해당 요청에 응답하는 ContentProvider 메서드(메서드 쿼리), 삽입(), insert(), delete() 및 getType()이 호출됩니다. 프로세스에 대한 UI 스레드가 아닌 콘텐츠 공급자프로세스의 스레드 풀에서 가져옵니다. 이러한 메서드는 여러 스레드에서 동시에 호출될 수 있으므로 스레드로부터 안전하도록 메서드도 구현해야 합니다. 다음 코드는 AsyncTask를 사용하여 인터넷에서 무언가를 다운로드하는 방법을 보여 줍니다. 코드는 안드로이드 매니페스트에서 android.permission.INTERNET 권한이 필요합니다.

코드 변경이 완료되면 물리적 장치 또는 에뮬레이터에서 응용 프로그램을 실행합니다. 응용 프로그램이 실행되면 응용 프로그램이 고정되는 것처럼 보이는 단추를 터치합니다. 예를 들어, 두 번째로 단추를 터치할 수 없으며, 그림 29-2에서 설명한 것처럼 운영 체제가 응답하지 않는 것으로 응용 프로그램을 보고합니다: 처리기는 Android Handler 클래스에서 하위 클래스로 분류되고 스레드에서 필요할 때 실행할 Runnable을 지정하거나 스레드에서 메시지를 처리기로 보낼 때 호출되는 Handler subclass 내의 handleMessage() 콜백 메서드를 재정의하여 사용됩니다.

Read all articles in Uncategorized