본문 바로가기

안드로이드

Android에서 Context란? (What is Context in Android)

반응형

콘텍스란 애플리케이션 리소스와 클래스를 접근하기 위한 인터페이스를 제공하는 abstract class입니다.

위 그림을 보면, 애플리케이션과 서비스의 콘텍스트는 ContextThemeWrapper 클래스를 상속받지 않기 때문에 애플리케이션의 테마에 접근이 불가하여 기본테마로 보여지게 됩니다.

콘텍스트를 사용할 때는 메모리릭에 주의하기 위해서 각 context의 생명주기를 파악하고 사용해야 합니다. 

특히 코틀린의 object 등의 정적클래스에서 사용을 주의해야 합니다.

class MainActivity: Activity() {
    companion object {
        lateinit var mTextView: TextView
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        mTextView = findViewById(R.id.sample) as TextView
    }
    ...
}

위 코드는 textview가 actvity가 destroy 된 이후에도 참조가 남게 됩니다. 왜냐하면 companion object는 java 정적필드와 유사하고 활동이 파괴될 때 가비지 콜렉터에 의해 수집되지 않습니다.

 

마찬가지로 Application Context 사용할 때는 충분히 고민해보도록 합시다. Application의 context는 가장 긴 수명주기로 메모릭 이슈를 일으킬 수 있습니다.

또한, Activity보다 더 길게 살아남을 수 있는 객체에서 activity의 context를 참조하지 않도록 합니다. 이유는 위와 같습니다.

 


여담으로는 구글 Adsense가 승인되어 기분 좋아 남기는 블로그 글입니다. ㅎㅎㅎ

반응형