[Android] Context

뭉개·2024년 4월 14일

Context

Context는 애플리케이션 환경에 대한 전역 정보의 인터페이스로 시스템 요청이 필요한 작업에 대한 API를 제공합니다.

Context는 언제 사용할까?

  • 패키지, 애플리케이션 정보 읽기
  • 리소스 읽기
  • 컴포넌트(액티비티, 서비스, 브로드캐스트) 제어
  • 파일시스템 접근

Activity Context VS Application Context

Activity Context는 Acitivty의 라이프사이클과 연결되어 있기 때문에 View Model, Singletone등 외부에서 Context를 멤버 변수로 참조할 경우 GC에 의해 정리되지 않아 메모리 누수가 발생할 수 있습니다.

Application Context는 애플리케이션의 라이프사이클과 연결되어 있기 때문에 외부에서 Context가 필요한 경우에는 Application Context를 참조하면 됩니다.

또한 Application ContextActivity Context의 모든 기능을 지원하는 것은 아니기 때문에 Dialog등 Ui와 관련된 Context는 가까운 Activity Context를 참조하는것이 안전합니다.

Compose에서 Context

Compose에서 주로 LocalContext.current를 통해 Context를 호출합니다.
LocalContext.current통해 호출되는 Context는 Composables 트리 최상위에서 setContent를 호출하는 Activity의 Context입니다.
CompositionLocal을 통해 하위 Composables까지 전달합니다.

Compose에서 Activity기능을 사용할 경우 타입 캐스팅을 이용해 사용할 수 있습니다.

@Composable
fun MyScreen() {
    val mainActivity = LocalContext.current as MainActivity

    Button(onClick = {
        mainActivity.startActivity(
            Intent(mainActivity, SecondActivity::class.java)
        )
    }) {
        Text(text = "Run Second Activity")
    }
}

references

https://www.youtube.com/watch?v=yoU-3ks7e5Q&t=189
https://lakue.tistory.com/82

0개의 댓글