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


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

context와 싱글턴


정리하면

Application Context(``kt applicationContext``)는 어플리케이션 전역적으로 하나만 존재하는 싱글턴 객체이며

Activity Context(``kt this``)는 Activity life-cycle을 따르는 Context다.


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


Note ) ``kt applicationContext``도 어떤 ``kt Context``를 통해서 접근해야 한다.

사실 ``kt applicationContext`` 형태로 접근하는건 앞의 ``kt this.``이 생략된 것인데, 여기서 주의해야 할 점이 ``kt onCreate()``이전에는 ``kt this`` Context가 제대로 초기화되기 이전이라서 ``kt this.applicationContext``에 접근하면 NPE가 발생한다.

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


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

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

```kt

class foo {

    val mContext : Context = this

}

```

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