안드로이드/Deep in the AOS

Context :: 그래서 Context가 뭐라고? [ Deep in the AOS ]

Context... Context... Context

안드로이드 앱 개발을 하다보면 Context를 많이 만나게 됩니다.

그런데 Context가 대체 뭐냐고 물어보면 나는 제대로 답하지 못했습니다.

??? : Context는 Context야 ~

 

Android Developers에서 Context를 뭐라고 설명하고 있을까요?

Context는 앱 환경에 대한 전역 정보의 Interface입니다.
Android 시스템에서 구현을 제공하는 Abstract Class입니다.
Context는 앱 별 Resource와 Class 접근을 허용하며 Activity 시작, Intent 수신과 Broadcast 등의 Application 수준 작업의 호출이 가능합니다.

음... 바로 와닿지는 않았습니다. 🤨 (잘 몰랐기 때문에...)

Context는 그러니까 앱과 관련된 정보에 접근하고자 할 때 앱과 연관된 시스템 레벨의 함수를 호출할 때 사용됩니다.

그런데 Android System에서 앱 정보를 관리하고 있는 것은 시스템이 아닌 ActivityManagerService 라는 것입니다.

안드로이드에서는 앱과 관련된 정보에 접근할 때 ActivityManagerService 라는 것을 이용해야만 합니다.

이 때, 당연히 정보에 접근할 앱이 어떤 앱인지에 대한 Key 값도 필요합니다.

 

안드로이드에서 Context는 그래서 필요합니다.

자신이 어떤 앱을 나타내고 있는 지 알려주는 Key 역할, ActivityManagerService에 접근할 수 있도록 하는 통로 역할

이런 역할을 하고 있는 것이 Context 입니다.

 

이런 Context는 또 2가지로 나뉩니다.

1. Application Context - Application life-cycle과 함께함

2. Activity Context - Activity life-cycle과 함께함

즉, Application Context는 앱이 종료될 때 까지이며 Activity Context는 액티비티가 Destroy()되면 없어질 수 있다.

 

Activity Context는 Activity에 대한 환경 정보가 Context에 있고 Intent를 통해 다른 Activity를 띄우면 Activity Stack이 쌓이게 됩니다.

 

다음 그림을 보며 함께 확인해보겠습니다.

H앱에 존재하는 A, B Activity가 있습니다.

Activity A에서 B를 띄우려고 할 때 Activity Manager Service에게 요청을 합니다.

Activity Manager Service는 먼저 App의 Context를 가져온 다음 ActivityContext가 자신에게 맞게 변형시킵니다.

Activity Manager Service에서 Manifest에서 확인해 해당 앱에 맞는 class를 띄워줍니다.

 

View에서 AppContext를 사용하지 않는 이유

View에 관한 내용을 수정하고자 할 때는 Activity Context를 사용하는 이유를 알 수 있을 것입니다.

만약 AppContext를 사용했다면 Activity가 종료되어도 View와 관련된 정보는 App에 있으므로 사라지지 않습니다.

그래서 생명주기와 함께하는 Activity Context를 사용하는 것입니다.

 

평소에 그냥 지나쳐왔던 것들이 후회되는 순간이었습니다 :)

Context를 그렇게 자주 사용하면서 아무것도 모르고 사용했었다니...🥹

이번 포스팅으로 인해 Context를 조금이라도 더 이해하고 사용할 수 있을 것 같습니다 ~