이번시간은 AsyncQueryHandler 를 사용하여 콘텐트 프로바이더에서 비동기적 CRUD 작업 처리를 전문으로 하는 유틸리티 클래스이다. 클래스는 UI스레드에서 콘텐트 프로바이드 작업을 떠넘기는 데 사용되고, UI 스레드는 백그라운드 태스크가 완료되면 수신한다. 다음 주제에 대해 배워보도록하자콘텐트 프로바이더의 기본과 동시 접근AsyncQueryHandler를 구현하고 사용하는 방법백그라운드 실행에 대한 이해해13.1 콘텐트 프로바이더에 대한 간략한 소개 콘텐트 프로바이더는 데이터베이스 중심의 네 가지 접근 메서드인 CRUD 접근 방식을 통해 데이터를 읽고, 추가하고, 변경하고, 삭제할 수 있는 인터페이스를 제공한다. 커스텀 프로바이더 public class EatContentProvider ext..
11장에서는 런타임에 의한 백그라운드 스레드의 종료를 피하면서, 서비스 생명주기가 비동기 실행을 처리하는 방법에 대해 논의했다. 그러나 서비스는 UI스레드에서 실행되기 때문에 완전한 비동기 기술이 아니다. 이러한 단점은 Service 클래스를 확장한 IntentService를 통해 해결할 수 있다. 12.1 기본사항인텐트 서비스는 싱글 백그라운드 스레드에서 태스크를 실행한다.인텐트 서비스가 실행중이라면 큐에서 대기하고, 더이상 처리할 인텐트가 없을 때 생명주기가 끝난다. 인텐트 서비스는 활성화된 구성요소를 항상 포함하므로, 너무 일찍 태스크가 종료되는 문제를 막을 수 있다. 사용방법은 인텐트 서비스를 오버라이드 하고, 서비스 구성요소를 AndroidManifest.xml에 정의한다.
이번 장에서는 서비스를 통한 비동기 실행에 초점을 맞춘다. 비동기 실행자와 결합한 서비스는 백그라운드 태스크 실행을 위한 가장 강력한 도구이다. 11.1 비동기 실행을 위해 서비스를 사용해야 하는 이유 서비스 대신 일반 스레드를 이용하면 두 가지 위험이 있다. 구성요소 생명주기와 스레드 생명주기의 분리 스레드 생명주기는 안드로이드 구성요소 자바 객체 주기와 독립적이므로, 구성요소가 끝나더라도 계속 진행한다. 때문에 스레드가 종료될 때까지 자바 객체가 가비지 컬렉션이 되지 않는 메모리 릭이 발생할 수 있다. 호스팅 프로세스의 생명주기 런타임이 프로세스를 종료하면 프로세스의 모든 스레드가 종료된다. 이는 데이터가 유지되기도 전에 백그라운드 스레드가 중단되는 프로세스 종료의 위험을 증가시킨다.브로드케스트 리시..
학습 목표android에서의 스레드 사용의 주요 목적은 오래 걸리는 작업을 UI스레드에서 제거하는 것이다. 그 테스크를 백그라운드 테스크를 만들고 UI스레드와 통신하는 방법이 필요한데, 이런 작업들을 쉽게 하는것이 android AsyncTask를 이용하면 좋다.오늘은 AsyncTask 클래스에 대해 상세히 알아보고, AsyncTask가 백그라운드 테스크 실행을 부드럽게 처리하는 방법과 조심해야 할 위험성에 대해 살펴본다. 10.1 기본 사항 AsyncTask : 백그라운드 스레드에서 실행되는 비동기 태스크다. doInbackground()를 통해 task가 실행된다. public class MinimalTask extends AsyncTask { @Override protected Object doIn..
개요 자바의 실행자(Executor) 프레임워크는 스레드에 대해 그리고 시스템에서 스레드가 사용하는 자원에 대한 새로운 차원의 제어를 가능하게 한다. Executor 프레임워크에 관련된 클래스를 사용하면 시스템이 스레드 수를 관리하거나 더 이상 필요하지 않은 스레드를 취소 할 수 있다.스레드에서 실행되기를 기다리는 태스크 수를 제어하는 작업자 스레드 풀과 큐를 설정한다.비정상적으로 종료되는 스레드를 초래하는 에러를 확인한다.완료되는 스레드를 기다리고 스레드로부터 결과를 가져온다.스레드의 일괄 처리를 실행하고 고정된 순서로 결과를 가져온다.사용자가 더 빨리 결과를 확인할 수 있도록 알맞은 시간에 백그라운드 스레드를 시작한다.9.1 Executor Executor 프레임워크 기본 구성요소는 Executor ..
오늘 알고리즘 공부는 분할 정복 문제들에 대해서 살펴보도록 하자. 분할 정복 알고리즘이란? 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제의 답을 계산하는 방법. 재귀와의 차이점은 재귀는 한조각과 나머지 부분과 분할하지만, 분할 정복은 항상 절반씩으로 나눈다. 분할 정복 알고리즘의 구성요소문제를 더 작은 문제로 분할하는 과정 (divide)문제에 대해 구한 답을 원래 문제에 답으로 병합하는 과정 (merge)더 이상 답을 분할하지 않고 곧장 풀 수 있는 매우 작은 문제 (base case)분할 정복의 장점작업을 더 빠르게 처리해 준다. 예제 : 수열의 빠른 합과 행렬의 빠른 제곱 1~n까지의 합fastsum() = 1 + 2 + .... + n 1~n/2 + n/2 ~ n까즤 합으로 바꿀 수 있다..
이번장부터 본격적으로 안드로이드에서 제공하는 스레드 관리 클래스에 대해서 알아보고 활용하는 시간을 갖도록 하자. 오늘은 그 중 핸들러 스레드(메시지 큐) 메커니즘에 대해 알아보자핸들러 스레드를 사용하는 방법수동으로 전달 메커니즘 설정 vs 핸들러 스레드 사용핸들러 스레드 사용 사례 8.1 기본사항 핸들러 스레드는 메시지 큐를 소유한 스레드다. (Thread.Looper.MessageQueue를 포함) 핸들러 스레드가 시작되면 루퍼와 메시지 큐를 설정하고 처리될 메시지가 들어오는 것을 기다린다. HandlerThread handlerThread = new HandlerThread("HandlerThread"); handlerThread.start(); mHandler = new Handler(handler..
Part2. 지난 시간까지는 기본적인 안드로이드 스레드, 프로세스에 대해서 설명하였다면, 이번씨간 부터는 어떤 방식으로 실제 구현하는가에 대한 초점을 맞추며 배워보도록 하자. 오늘 내용.스레드 사용의 몇 가지 기본사항을 다루고, 안드로이드 구성요소와 협력하는 스레드에 대해 논의 하고, 스레드 관리로 마무리한다.(태스크의 취소, Activity, Fragment객체에서 스레드를 유지하는 방법) 7.1 기본 사항 안드로이드 thraed 클래스는 일반 자바 프로그래밍의 Thread클래스와 같고, Thread 클래스는Runnable로 표현되는 태스크를 위한 실행 환경을 만든다. 7.1.1 생명주기스레드가 존재하는 동안에 나타날 수 있는 관찰 가능한 상태를 설명한다. (Thread.State)다음과 같이 생성 -..