안드로이드 개발을 하면서 this
, baseContext
, applicationContext
등의 여러 가지 형태의 Context를 메소드의 인자로 넘겨주는 것을 많이 보았을 것입니다.
Toast.makeText(this, "Toast", Toast.LENGTH_SHORT)
하지만 this
의 자리에는 baseContext
, applicationContext
등 여러 값이 들어갈 수 있습니다. 이러한 자리에 어떤 Context의 형식을 넣어줘야 할까요?
Context
맥락, 문맥
위의 해석처럼 Application/Activity의 현재 정보, 흐름를 담고 있는 객체이며, 새로 생성된 객체에게 해당 실행 맥락을 제공합니다
실행중인 Activity의 맥락을 담고 있는 Context입니다
Application의 맥락을 담고 있는 Context입니다
앞서 잠깐 설명 했듯이, Intent, Toast 등 안드로이드의 여러 컴포넌트에서는 Context를 파라미터로 제공받습니다. 하지만 이러한 Context가 들어가는 자리에 적절하지 않은 Context를 사용한다면 메모리 누수가 발생할 수 있습니다. 예를 들어, Application Context를 참조하여 싱글톤 객체를 생성해야 할 때 Activity Context를 참조하여 생성하게 된다면, Garbage Collector가 Activity Context를 수거하지 못하여 메모리 누수가 발생합니다.
Activity Context =
this
=getBaseContext()
this
또는 baseContext
는 현재 Activity 자신을 가리킵니다
Application Context =
getApplicationContext()
=getApplication()
applicationContext
는
Activity의 수명 주기 내에서 처리할 수 있는 작업, 예를 들어 Intent, Toast, Dialog 등의 작업은 this, baseContext와 같은 Activity Context를 사용하여 작업을 처리하고, ViewModel 등의 Application와 수명 주기를 공유하거나 단일 Activity의 수명보다 긴 작업을 하는 경우에는 Application Context를 사용하여 작업을 처리하여야 합니다.
참고 자료