Post

Android Context 정리

Context란? + 안드로이드의 프로세스 / 어플리케이션 차이

https://stackoverflow.com/questions/10347184/difference-and-when-to-use-getapplication-getapplicationcontext-getbasecon

context와 싱글턴

정리하면 Application Context(applicationContext)는 어플리케이션 전역적으로 하나만 존재하는 싱글턴 객체이며 Activity Context(this)는 Activity life-cycle을 따르는 Context다.

View를 조작하거나 어떤 Activity와 밀접한 관련이 있는 경우 this를, 나머지 경우(특히 싱글턴이나 DB)에는 applicationContext를 사용하면 된다.

Note)applicationContext도 어떤 Context를 통해서 접근해야 한다. 사실 applicationContext형태로 접근하는건 앞의 kt this.이 생략된 것인데, 여기서 주의해야 할 점이 onCreate()이전에는 thisContext가 제대로 초기화되기 이전이라서 kt this.applicationContext에 접근하면 NPE가 발생한다. 그래서 필드 초기화에 바로는 못쓰고 lateinit해야 한다.

* this != this.baseContext다. 둘 다 Activity Context를 반환하긴 하지만 다르기 때문에 Context 잘못 넘기면 프로그램 강제 종료된다.

외부 클래스에서 Activity의 Context에 접근해야 하는 경우
1
2
3
4
class foo {
val mContext : Context = this
}

* 내부 클래스의 경우 그냥 this@OuterCls를 사용하면 된다.

This post is licensed under CC BY 4.0 by the author.