컴포넌트 활성화 및 비활성화
지금까지 살펴본 컴포넌트는 언제 활성화되고 언제 비활성화될까? 일반적으로 처음 시작되는 메인 액티비티는 애플리케이션을 실행할 때 시작된다. 그렇다면 다른 액티비티는 어떻게 시작할 수 있을까? 바로 인텐트를 통해 시작할 수 있다. 하지만 모든 컴포넌트가 인텐트로 시작되는 것은 아니다. 콘텐트 프로바이더는 콘텐트 리졸버(ContentResolver)를 통해서 시작된다. 다음은 이에 대해서 정리한 것이다.
정리 활성화 시점
컴포넌트 | 활성화 시점 |
---|---|
Activity | 인텐트에 의해 활성화 |
Service | 인텐트에 의해 활성화 |
Broadcast Receiver | 인텐트에 의해 활성화 |
Content provider | ContentResolver에 의해 활성화 |
※ Activity와 Service를 위한 인텐트는 Action과 URI 정보가 필요 ※ Broadcast receiver를 위한 인텐트는 Action 정보가 필요
정리 컴포넌트 활성화
컴포넌트 | 활성화 |
---|---|
Activity | Context.startActivity(), Activity.startActivityForResult()에 인텐트 객체를 전달해서 활성화 |
Service | Context.startService()에 인텐트 객체를 전달해서 활성화 안드로이드는 인텐트 객체를 Service의 onStart() 메소드에 전달 |
Broadcast Receiver | Context.sendBroadcast(), Context.sendOrderedBroadcast(), Context.sendStickyBroadcast()에 인텐트 객체를 넘겨서 활성화 |
※ Broadcast Receiver의 경우에는 명시적으로 호출하지 않아도 적당한 인텐트 필터를 AndroidManifest.xml에 지정해 놓으면 조건이 맞을 때 호출되어 활성화될 수 있다.
이제 컴포넌트가 언제 비활성화되는지에 대해서 살펴보겠다. 안드로이드는 시작한 후에 메모리가 부족하거나 기타 여러 이유로 활성화되어 있던 Activity를 비활성화시킨다. 만약 컴포넌트를 직접 비활성화시키고 싶다면, 액티비티에서는 finish() 메소드를 호출해야 하며 서비스에서는 stopSelf() 메소드를 호출해야 한다.
정리 컴포넌트 비활성화
컴포넌트 | 비활성화 |
---|---|
Activity | finish()에 의해 비활성화됨. 다른 액티비티를 비활성화하고 싶을 때는 finishActivity()를 사용 |
Service | stopSelf() 나 Context.stopService()로 비활성화됨 |
Broadcast Receiver | 명시적으로 비활성화시킬 필요 없음 ※ Broadcast 메시지에 대한 응답 시에만 활성화됨 |
Content provider | 명시적으로 비활성화시킬 필요 없음 ※ ContentResolver의 요청 응답 시에만 활성화됨 |
지금 살펴본 내용들은 이 책을 어느 정도 학습하고 나면 이해할 수 있는 내용이므로 지금은 이렇게 활성화하고 비활성화할 수 있구나 정도로 이해하고 넘어가도록 하자.