Loading [MathJax]/extensions/TeX/cancel.js


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 형태로 접근하는건 앞의 this.이 생략된 것인데, 여기서 주의해야 할 점이 onCreate()이전에는 this Context가 제대로 초기화되기 이전이라서 this.applicationContext에 접근하면 NPE가 발생한다.

그래서 필드 초기화에 바로는 못쓰고 lateinit해야 한다.


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

외부 클래스에서 Activity의 Context에 접근해야 하는 경우

class foo {
    val mContext : Context = this
}

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