이번시간은 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 ..
이번장부터 본격적으로 안드로이드에서 제공하는 스레드 관리 클래스에 대해서 알아보고 활용하는 시간을 갖도록 하자. 오늘은 그 중 핸들러 스레드(메시지 큐) 메커니즘에 대해 알아보자핸들러 스레드를 사용하는 방법수동으로 전달 메커니즘 설정 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)다음과 같이 생성 -..
지난 시간에 안드로이드 스레드, 프로세스간 통신 기법과 원리에 대해서 장시간 설명했다.오늘은 쉬어가는 의미에서 안드로이드 메모리 관리는 어떻게 되는가에 대해서 간단히 살펴보도록 하자. 메모리 관리가 왜 중요한가? 메모리 누수는 응용프로그램에 있어서 crash를 초래할 뿐만 아니라 기기 전체에 영향을 미쳐서 성능을 저하시키므로 메모리 관리가 필수적이다. 우리는 오늘 프로그램의 정확한 설계를 통해 스레드와 관련된 메모리 누수의 위험을 관리하기 위한 전략을 배워보도록 하자. 6.1 가비지 컬렉션 달빅 VM은 메모리가 너무 커질 때, 힙이라는 공유 메모리로부터 가비지 컬렉터(GC)로 할당된 메모리를 주기적으로 회수하는 메모리 관리 시스템이다. 힙 외부에서 접근할 수 있는 모든 객체는 GC루트로 간주되고, 스레드..
지난시간까지 하나의 프로세스 안에서 돌아가는 여러 스레드의 통신에 대해서 알아 보았다. 주로 공유메모리(힙)를 이용한 통신이고 동시 접근이나, 스케줄링을 하는 원리에 대해서 배워 보았다. 이번 시간에는 안드로이드에서의 프로세스 간의 통신에 대해 알아보도록 하자. 개요안드로이드 플랫폼은 바인더(binder) 프레임워크를 통해 프로세스 경계를 넘는 통신, 즉 프로세스 간 통신(IPC)를 지원한다. 바인더 프레임워크는 스레드 사이에 공유하는 메모리 영역이 없을 떄, 데이터 트렌젝션을 관리한다. IPC사용 예 : 인텐트, 시스템 서비스, 콘텐트 프로바이더 등 안드로이드 구성요서에 의해 처리된다. 5.1 안드로이드 RPC IPC는 시그널, 파이프, 메시지 큐, 세마포어, 공유 메모리와 같은 여러 IPC 기술을 지..
지난시간까지 안드로이드의 스레드 종류와 우선순위에 대해서 알아보았다. 이번 시간에는 일반적인 스레드 통신 기법과 안드로이드에서의 스레드 통신 기법에 대해서 알아보도록 하자. 단방향 데이터 파이프를 통한 데이터 전달공유 메모리 통신블로킹 큐를 사용하는 소비자-생성자 패턴 구현메시지 큐의 동작UI 스레드로 태스크 전송 4.1 파이프java.io 패키지의 일부생산자 스레드는 파이프에 데이터를 기록하고 소비자 스레드는 파이프에서 데이터를 읽는다.단방향 스레드이기 때문에 한쪽에서 읽기만하고 한쪽에선 쓰기만 한다.소비자 생성자 패턴에 사용된다. 4.1.1 기본 파이프 사용 방법 연결 설정 PipedReader r = new PipedReader(); PipedWriter w = new PipedWriter(); w..