Android Context
포스트
취소

Android Context

안녕하세요. Narvis2 입니다. 오늘은 Android의 Context에 대하여 알아보고자 합니다.
Context는 Application 환경에 대한 글로벌 정보를 갖는 인터페이스 입니다.
Android에서는 대표적으로 Application의 Context와, Activity의 Context가 존재합니다.
밑에서 자세히 알아보도록 하겠습니다.

Context


  • Application 환경에 대한 글로벌 정보를 갖는 인터페이스입니다.
  • Android System에서 구현체를 제공하는 추상 클래스입니다.
  • Application 별 Resource 및 클래스 접근에 사용되며, Activity 실행, BroadcastReceiver, Intent 수신과 같은 Application 수준 작업에 사용됩니다.
  • Application의 현재 상태를 나타냅니다.

    참고 👇

    • Context는 Application의 현재 상태의 맥락(Context)를 의미합니다. Context는 새로 생긴 객체가 지금 어떤일이 일어나고 있는지 알 수 있도록 합니다. 따라서 Activity와 Application에 대한 정보를 얻기 위해서는 Context를 사용하면 됩니다.
  • Activity Application의 정보를 얻기 위해 사용할 수 있습니다.
  • Activity 와 Application은 Context 클래스를 확장한 클래스입니다.

    참고 👉 Context를 사용하는 경우
    Resource, Database, SharedPreference 등에 접근하기 위해 사용합니다.

Application Context


  • Singleton 인스턴스입니다.
  • Activity에서 getApplicationContext()를 통해 접근할 수 있습니다.
  • Application의 Lifecycle에 묶여 있습니다.

    참고 👉 현재 Context가 종료된 이후에도 Context가 필요한 작업이나 Activity Scope를 벗어난 Context가 필요한 작업에 적합합니다.

  • Singleton Object를 생성하고 해당 Object가 Context가 필요하면 ApplicationContext를 사용합니다.

    주의❗️ Singleton에 Activity의 Context를 전달할 경우, 해당 Object가 Activity를 항상 참조하므로 Activity가 화면에 표시되지 않는 순간에도 Garbage Collection(가비지 컬렉션)이 진행되지 않아 메모리 누수가 발생할 수 있습니다.

  • Application 전체에서 사용할 라이브러리를 특정 Activity에 초기화 한다면 ApplicationContext를 사용합니다.

    참고 👇

    • Room, SharedPreference, Sinlgeton을 사용할 때는 ApplicationContext를 사용합니다.
    • ContentProvide 의 getContext() 는 Application Context입니다.

Activity Context


  • Activity 내에서 유요한 Context입니다.
  • Activity의 Lifecycle과 연결되어 있습니다.
  • Activity와 함께 소멸해야하는 경우에 사용합니다. 즉, Activity와 Lifecycle이 같은 Object를 생성할 때 사용합니다.

    참고 👇

    • Toast, Dialog 등의 UI Option에서 Context가 필요한 경우 Activity의 Context를 사용합니다.
    • resources 를 사용하는 경우 Activity의 Context를 사용합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.