본문 바로가기
프로그래밍 놀이터/안드로이드, Java

Efficient Android Threading #10 인텐트 서비스

by 돼지왕왕돼지 2018. 3. 26.

Efficient Android Threading #10 인텐트 서비스


이 글은 Efficient Android Threading 의 일부 내용만 발췌한 내용입니다.

자세한 내용은 책을 구입해서 보세용.

Asynctask, broadcast receiver, Efficient Android Threading #10 인텐트 서비스, Finish, goASync, handler thread, intent service, intentservice, IntentSevice, PendingResult, setintentredelivery, single background thread, start_not_sticky, start_redeliver_intent, stopself, task, 동시 테스크 실행, 생명주기, 생성자, 순차적으로 정렬된 태스크, 순차적이고 재배열 가능한 테스크, 인스턴스 단위, 인탠트 서비스, 인텐트 서비스

12.1. 기본 사항


-

IntentService 는 싱글 백그라운드 스레드에서 태스크를 실행한다.

서비스가 실행 중인 경우, 인텐트는 백그라운드 스레드가 처리를 위해 준비될 때까지 큐에서 대기한다.

실행 중이 아닌 경우 새로운 구성요소 생명주기가 시작되고, 더 이상 처리할 인텐트가 없을 때 구성요소의 생명주기가 끝난다. ( stopSelf 로 중지시킬 필요가 없다. 내부적으로 수행된다. )

즉 실행할 태스크가 있는 동안에만 인텐트 서비스가 실행된다.



-

IntentSevice 에서 백그라운드 태스크 실행자는 핸들러 스레드다.

AsyncTask 기본 실행자와 달리 인텐트 서비스 실행자는 앱 단위가 아닌 인스턴스 단위이다.

따라서 앱은 여러 IntentService 인스턴스를 가질 수 있다.

모든 인스턴스가 순차적으로 태스크를 실행하지만 다른 IntentService 와는 독립적이다.



-

프로세스가 죽은 경우 인텐트 서비스가 복원되어야 하는지 생성자에서 지정할 수도 있다.

기본 인텐트 서비스는 보류 중인 시작 요청이 있을 때만 복원하지만(START_NOT_STICKY), setIntentRedelivery(true) (START_REDELIVER_INTENT) 호출은 마지막 전달된 인텐트를 재전달한다.





12.2. 인텐트 서비스를 사용하는 좋은 방법


** 12.2.1. 순차적으로 정렬된 태스크



** 12.2.2. 브로드캐스트 리시버에서 비동기 실행


-

API Level 11 부터는 비동기 실행을 단순화하기 위해 BroadcastReceiver.goAsync() 메소드를 사용할 수 있다.

이 메서드는 BroadcastReceiver.PendingResult 에 비동기 결과의 상태를 유지한다.

또한 BroadcastReceiver.PendingResult 가 비동기 실행이 마친 후 호출될 수 있는 finish 로 명시적으로 종료될 때까지 브로드캐스트의 수명을 확장한다. ( finish 가 불릴 때까지 다음 broadcast 를 받지 않는다 )

public class AsyncReceiver extends BroadcastReceiver{

    public void onReceive(Context context, Intent intent){

        final PendingResult result = goAsync();

        new Thread(){

            public void run(){

                // background 작업

                result.finish();

            }

        }.start();

    }

}





12.3. 인텐트 서비스와 서비스


-

다음의 경우에는 인텐트 서비스가 아닌 일반 서비스를 이용해 구현을 확장해야 한다.


클라이언트에 의한 제어 ( 예: 생명주기 )

동시적인 태스크 실행

순차적이고 재배열 가능한 태스크






댓글0