Android

[Android] Context란? - 다른 액티비티의 변수,함수 호출

BEOKS 2021. 1. 3. 18:07

들어가며

안드로이드 코드를 작성하다보면 view를 다룰 때 꼭 한번 context를 parameter로 요청하는 경우가 있다.

그냥 단어만 알고있던 이것에 대해서 한 번 알아보고 어떤 쓸모가 있는지 알아보고 다른 인스턴스에 접근하는 방법을 탐구해보자. ( 인스턴스 접근방법을 알고 싶다면 맨 아래 문단을 참고하기 바랍니다. )

Context의 정의

출처: https://developer.android.com/reference/android/content/Context

위는 Android Developers에 게시된 문서의 정의부분이다. 읽어보니 안드로이드의 시스템 요소와 자원에 접근하기 위한 추상 클래스라고 한다. 문서를 조금더 찾아보니 Activity, Application, Service의 base class로 사용된다고 한다. 이를 알고 나니 기본적인 시스템 추상클래스라는 느낌을 알겠다.

용례

  • 어플리케이션의 resource 획득
  • 새로운 activity 시작
  • view 생성
  • system service 획득

사용 예시에는 위와 같은 경우가 있는데 이는 getResource(), startActivity() 등의 함수를 어느정도 다루어봤다면 당연히 알 것이다. 이 정도로 끝났다면 나는 이번 포스팅을 작성하지 않았을 것이다. 생각해보니 이를 이용하면 CustomView를 만들때 해당 뷰가 속한 액티비티의 함수를 CustomView에서 자유롭게 호출할 수 있을것 같았다.

다른 액티비티에서 변수, 함수 호출

아래는 내가 만든 CustomButton이다. 우선 생성자를 호출할 때 뷰는 모든 Context를 인자로 받아야하는데 이를 MainActivity클래스로 캐스팅하여 변수로 저장했다.

그 다음 버튼을 클릭할 때 startForegroundService를 호출하도록 실험해봤는데.... 된다..... MainActivity는 싱글톤 클래스고 Context를 MainActivity으로 캐스팅해서 안 될줄 알았는데 된다....

다른 액티비티나 커스텀 뷰에서 메인 액티비티의 변수나 함수에 접근하는데 stack overflow에 서칭도 해보고 고민을 많이 했는데 너무 간단하게 된다.... 아무튼 오늘 좋은 지식을 하나 얻었다.