2020. 2. 24. 22:20ㆍandroid
1. 개념
안드로이드 스튜디오를 하다보면 context란 것을 자주 볼 것이다. 안드로이드 디밸로퍼를 보면
context란 어플리케이션의 환경 정보를 갖는 전역 인터페이스라고 정의된다. 또한 context를 사용하면 application의 resource 또는 class 뿐만아니라 launching activities, broadcasting 그리고 intent 등과 같은 application단 레벨의 operation등을 이용할 수 있다
2. 사용법?
그럼 context는 언제쓸까?
첫번째, 안드로이드 개발을 하면서 또 많이 쓰는 것 중 하나는 intent가 아닐까싶다. intent는 activity간의 전환을 하는데 도움을 주는 메서드이다. 이때 우리가 작업하고 있는 class가 activity를 상속하여 확장하고 있다면
Intent intent = new Intent(현재 내 class.this, 옮길class.class); 이렇게 사용을 하는 예제를 보았거나 혹은 사용해 왔을 것이다. 그런데 이상한 것이 있다. Intent(arg1,arg2); 에서 첫번째 인자는 context가 들어가는 자리인데 우리는 class 자체를 넣는다. 그런데 또 에러는 나지 않는다.
왜그런 것일까?
이유는 activity가 context를 또 상속하고 있기 때문이다. 자세하게는 activity ->ContextThemeWrapper -> ContextWrapper -> Context 이렇게 상속을 받고 있기 때문에 우리가 현재 작업하고 있는 class가 activity를 상속받고 있다면 우리는 현재 class.this를 context자리에 넣어도 문제가 되지 않는다.
두번 째, 액티비티의 생명주기를 따르는 Fragment 내에서 액티비티의 context를 받아와 사용할 수 있다. Context를 구현하지 않는 Fragment는 반드시 액티비티의 Context를 가져와서 액티비티에서 사용할 수 있는 기능드을 똑같이 사용할 수 있다. 예를 들면 화면 전환을 위한 intent 설정 후, startActivity를 위해서 context를 이용해야한다. 이때 액티비티에서 받아온 context를 이용하여 fragment 내부의 처리로 화면 전환을 가능하게 할 수 있다.
그밖의 Resources 정보들을 얻거나 Adapter에서 사용하는 등 다양한 방법으로 쓸모있게 사용된다.
3. 정리
context는 크게 application context와 activity context로 나뉜다.
먼저 getApplicationContext() 메서드를 통해서 얻게되는 context는 application context다. 때문에 application context는 application의 lifeCycle을 따르게 되므로 앱을 시작하고 끝날 때에 따라서 생성되고 파기된다.
두번째 context는 activity의 context이다. application context처럼 activity context도 activity lifeCycle을 따르게 된다.
그렇기 때문에 앱 내의 한 화면의 생성과 소멸에 따라서 context의 존재 유무가 달라진다.
'android' 카테고리의 다른 글
newInstance()로 Fragment 생성해야하는 이유 (0) | 2020.08.12 |
---|---|
RecyclerView 2탄! item 클릭 시, 화면전환하기 (0) | 2020.04.22 |
RecyclerView 사용해보기!( 1부 ) (1) | 2020.04.17 |
Fragment LifeCycle (4) | 2020.03.03 |
Activity Lifecycle (6) | 2020.02.23 |