ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] Android Context란?
    안드로이드 2022. 2. 7. 13:30
    728x90
    반응형
    반응형

    안드로이드 개발을 하다 보면 Parameter로 Context를 빈번하게 넘겨주게 됩니다.

    하지만 이 Context가 뭔지도 모르고서 계속 사용하다가 Context를 잘못 사용 시 메모리 누수가 쉽게 발생하게 됩니다.🤦🏻‍♂️

    그래서 Context가 무엇인지, 어떻게 사용해야 하는지에 대해서 알아보았습니다.

     

    Context란

    • 애플리케이션의 현재 상태
    • Activity와 Application에 대한 정보를 얻는 데 사용
    • Resource, Database 및 Shared Preference에 대한 액세스 권한을 얻는 데 사용할 수 있다.
    • Activity 및 Application 클래스 모두 Context 클래스 확장한 클래스

    Context의 종류

    • Application Context : 싱글톤 인스턴스이며 getApplicationConetxt()를 통해 Activity에서 접근할 수 있습니다. 이 Context는 Application의 생명 주기와 연결되어있습니다. Application Context는 생명주기가 현재 Context와 분리된, 즉 현재 Context가 종료된 이후에도 Context가 필요한 작업이나 Activity Scope를 벗어난 Context가 필요한 작업에 사용할 수 있습니다.
    • Activity Context : Activity에서 사용할 수 있습니다. 이 Context는 Activity의 생명주기와 연결됩니다. Activity Scope내에서 Context를 전달하거나 현재 Context에 생명주기가 연결된 Context가 필요할 때 Activity Context를 사용해야 합니다.
    Content Provider에서는 getContext()를 통해  Application Context를 얻을 수 있습니다.

     

    앱 계층 구조👀

    Application 계층에서는 Application Context만 있는 상태입니다.

    Activity 계층에서는 각각의 Activity에 해당하는 Activity Context와 해당 Activity가 속해있는 Application의 Application Context가 존재합니다.

     

    언제 어떻게 사용하는가?🤷🏻‍♂️

    Toast메시지, Dialog 등과 같은 UI 조작이 필요한 경우 Activity Context를 사용해야 합니다. 

    Application Context는 사용할 객체가 Application에서 초기화되거나 singleton인 경우에 사용합니다. 

     

    계층 구조 상 항상 사용 가능한 가장 가까운 Context를 선택하는게 좋고, 싱글톤인 경우 Application Context를 사용해야 한다고 합니다.

    getApplicationConetxt() 사용 시 주의점🚫

    • Application Context는 Activity Context가 제공하는 기능 전체를 제공하지 않습니다. 특히 GUI와 관련된 Context 조작은 실패할 확률이 높습니다.
    • Application Context가 사용자 호출로 생성된, clean up 되지 않은 객체를 가지고 있다면 메모리 누수가 발생할 수 있습니다. Activity 객체는 메모리 관리가 가능하지만 Application 객체는 프로세스가 살아있는 동안 남아있습니다.

     

    출처
    https://blog.mindorks.com/understanding-context-in-android-application-330913e32514
    728x90
    반응형

    댓글

Designed by ZibroTistory.