관리 메뉴

나만을 위한 블로그

[Android] Context 받아오는 방법들 본문

Android

[Android] Context 받아오는 방법들

참깨빵위에참깨빵 2019. 12. 2. 16:36
728x90
반응형

Context는 개발자가 안드로이드의 기능을 쓰려고 할 때 사용하는 촉매제 같은 것으로 생각하고 있었다.

그런데 이 Context를 받아오는 방법이 여러가지라서 조금 정리해보려고 한다.

 

1. this : 가장 흔한 방법이다. onCreate() 등에서 토스트, 다이얼로그 따위를 쓰기 위해 Context를 받아올 때 사용하는 방법이다.

 

2. XXXActivity.this : 이것 또한 흔한 방법이다. 위의 방법으로 안 될 때 어떤 액티비티에서 Context를 가져와 사용한다.

 

3. 클래스 전역변수로 Context 변수 선언 : 처음부터 전역변수를 하나 만들고 사골 끓이듯이 써먹는 방법이다. 난 주로 리사이클러뷰 어댑터를 만들 때 onCreateViewHolder()에서 쓴다.

 

4. getApplicationContext : 이것도 무난하게 쓰인다.

 

5. public static Context context : 서비스에 리시버를 등록해 다이얼로그를 쓸 때 위의 방법대로 Context를 받아오면 BadTokenException 에러가 뜨며 다이얼로그가 출력되지 않는다. 원인은 백그라운드에서 동작하는 서비스 안의 리시버가 다이얼로그를 띄우는 데 사용할 Context를 참조하지 못하는 것이다.

해결법은 다이얼로그를 띄울 액티비티에서 액티비티의 Context를 제목대로 public static Context context; 를 전역변수로 선언해주고 onCreate()에 context=this; 를 선언해준다.

그 다음 다이얼로그를 출력 시 다이얼로그 Builder의 ()안(context 매개변수 자리)에 Activity.context를 넣어준다.

코드로는 대충 이렇다.

 

AlertDialog.Builder builder = new AlertDialog.Builder(Activity.context);
builder.setTitle("알림!").setMessage("메시지");
builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {

 

참고한 사이트 : https://salix97.tistory.com/34

 

[Android] 안드로이드 - BadTokenException 에러 해결방법

https://blog.yggdrasil.kr/77 https://tristan91.tistory.com/144 Serivce 에 BroadCastReceiver 를 등록해서 사용하던 도중, BroadCastReceiver 가 다이얼로그를 출력하지 못하고 BadTokenException 문제가 발생..

salix97.tistory.com

이것 말고도 방법이 더 있을 것 같은데 나머지는 외국 사이트 등에서 공부하면서 찾아봐야겠다.

반응형
Comments