안드로이드 Context 개념 익히기

조영규의 블로그

2016. 6. 1. 02:23 from Develop


Edit

티스토리 android 안드로이드

안드로이드 Context 개념 익히기

Context is the Interface to global information about an application environment.
컨텍스트는 애플리케이션의 environment에 대한 전역 정보를 위한 인터페이스다.

안드로이드 개발이 꽤나 쉽지 않다는 걸 알았다. 그래서 해보고 싶었다. 아니 해야한다 생각했다. 온갖 버그가 안드로이드 SDK안부터 서드파티 라이브러리까지 존재할 뿐만 아니라 파편화 또한 아이폰과 비교도 안될만큼 심하다는 게 시제품을 만드는 안드로이드 개발자 옆을 지키며 내가 안드로이드 공부를 시작하게 된 이유다. 내가 조금이라도 일을 더 도와준다면, 조금 더 빨리 완성되지 않을까 해서. 조금이라도 도움이 되지 않을까 하는 마음에 공부하기로 했다. 예전 Servlet/JSP, Spring등을 다룰 때 JAVA를 했던 기억을 더듬어 가며(놀랍게도 벌써 그개 3년이나 됐다는 걸 알았다), 안드로이드 공부를 시작하려 한다.

안드로이드 개발자 뒤에서 항상 보던 getApplicationContext()라는 함수가 기억났다. 왜 안드로이드는 맨날 저걸 던져줘야 하는건가 라는 생각이 항상 들었지만 한번도 그 이유가 제대로 궁금한 적은 없었다. 그냥 귀찮은 처리가 많은 개발 플랫폼이구만 이라고 생각했을 뿐.

안드로이드의 Context 개념은 안드로이드 디벨로퍼에 따르면, 위와 같다. 현재 사용되고있는 앱에 대한 전역 환경 정보를 가진 친구라고 한다. 이게 무슨 뜬구름 잡는 소린가.

여기 스텍오버플로우 글에서 많은 인사이트를 얻었다.

getApplication(), getApplicationContext(), getBaseContext(), getContext(), 그리고 SomeClass.this 까지 이게 뭐가 다른지에 대한 질문이었다.

즉,

Toast.makeText(LoginActivity.this, "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplication(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), "LogIn successful", Toast.LENGTH_SHORT).show();

이 친구들과

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
Intent intent = new Intent(MenuPagina., LoginActivity.class);
Intent intent = new Intent(getBaseContext(), LoginActivity.class);
Intent intent = new Intent(getApplication(), LoginActivity.class);

이 친구들 각각이 뭐가 다른지에 대한 것을 궁금해 하는 듯 했다. 나 또한 안드로이드 생초보지만, 어깨 넘어로 본 게 있어서 뭐가 다른지 궁금했다.

안드로이드 프레임워크에서 Context는 2가지 종류로 나뉜다.

  • 애플리케이션 Context
  • 액티비티 Context

애플리케이션 Context는 애플리케이션 자체의 생명주기(라이프사이클)에 영향을 받는다. 따라서 항상 애플리케이션의 생명 주기와 함께 한다.
그러나 엑티비티 Context는 액티비티의 라이프사이클과 함께 작동해, onDestory()와 함께 사라진다. 즉 액티비티에 대한 환경 정보들이 Context에 있고, 이 Context(엑티비티의)에 Intent를 통해 다른 액티비티를 띄우면, 엑티비티 스택이 쌓이게 되는 것이다.

LoginActivity.this though its referring to your own class which extends Activity class but the base class (Activity) also extends Context class, so it can be used to offer activity context.
getApplication() though its referring to Application object but the Application class extends Context class, so it can be used to offer application context.
getApplicationContext() offers application context.
getBaseContext() offers activity context.

세부적인 설명인데, 여기서 중요한 것은 안드로이드의 Avtivity와 Apllication class들이 모두 Context클래스를 상속받아 만들어졌다는 것이다. 그래서 LoginActivity.this라고 하는 순간, this에 해당하는 LoginActivity인스턴스가 파라매터로 전달되고, 이것은 Context를 상속받았기에 Context이며, 따라서 아무런 문제 없이 작동하게 되는 것이다.

Tips: 뷰를 수정하거나 할때는 Activity Context를 나머지 경우에는 Application Context를 사용하라.

다음은 액티비티의 생명주기에 대해서 공부를 해보아야 겠다.

@%5B%uD2F0%uC2A4%uD1A0%uB9AC%2Candroid%2C%uC548%uB4DC%uB85C%uC774%uB4DC%5D%0A%0A%23%20%uC548%uB4DC%uB85C%uC774%uB4DC%20Context%20%uAC1C%uB150%20%uC775%uD788%uAE30%0A%0A%3E%20Context%20is%20the%20Interface%20to%20global%20information%20about%20an%20application%20environment.%0A%3E%20%uCEE8%uD14D%uC2A4%uD2B8%uB294%20%uC560%uD50C%uB9AC%uCF00%uC774%uC158%uC758%20environment%uC5D0%20%uB300%uD55C%20%uC804%uC5ED%20%uC815%uBCF4%uB97C%20%uC704%uD55C%20%uC778%uD130%uD398%uC774%uC2A4%uB2E4.%0A%0A%uC548%uB4DC%uB85C%uC774%uB4DC%20%uAC1C%uBC1C%uC774%20%uAF64%uB098%20%uC27D%uC9C0%20%uC54A%uB2E4%uB294%20%uAC78%20%uC54C%uC558%uB2E4.%20%uADF8%uB798%uC11C%20%uD574%uBCF4%uACE0%20%uC2F6%uC5C8%uB2E4.%20%uC544%uB2C8%20%uD574%uC57C%uD55C%uB2E4%20%uC0DD%uAC01%uD588%uB2E4.%20%uC628%uAC16%20%uBC84%uADF8%uAC00%20%uC548%uB4DC%uB85C%uC774%uB4DC%20SDK%uC548%uBD80%uD130%20%uC11C%uB4DC%uD30C%uD2F0%20%uB77C%uC774%uBE0C%uB7EC%uB9AC%uAE4C%uC9C0%20%uC874%uC7AC%uD560%20%uBFD0%uB9CC%20%uC544%uB2C8%uB77C%20%uD30C%uD3B8%uD654%20%uB610%uD55C%20%uC544%uC774%uD3F0%uACFC%20%uBE44%uAD50%uB3C4%20%uC548%uB420%uB9CC%uD07C%20%uC2EC%uD558%uB2E4%uB294%20%uAC8C%20%uC2DC%uC81C%uD488%uC744%20%uB9CC%uB4DC%uB294%20%uC548%uB4DC%uB85C%uC774%uB4DC%20%uAC1C%uBC1C%uC790%20%uC606%uC744%20%uC9C0%uD0A4%uBA70%20%uB0B4%uAC00%20%uC548%uB4DC%uB85C%uC774%uB4DC%20%uACF5%uBD80%uB97C%20%uC2DC%uC791%uD558%uAC8C%20%uB41C%20%uC774%uC720%uB2E4.%20%uB0B4%uAC00%20%uC870%uAE08%uC774%uB77C%uB3C4%20%uC77C%uC744%20%uB354%20%uB3C4%uC640%uC900%uB2E4%uBA74%2C%20%uC870%uAE08%20%uB354%20%uBE68%uB9AC%20%uC644%uC131%uB418%uC9C0%20%uC54A%uC744%uAE4C%20%uD574%uC11C.%20%uC870%uAE08%uC774%uB77C%uB3C4%20%uB3C4%uC6C0%uC774%20%uB418%uC9C0%20%uC54A%uC744%uAE4C%20%uD558%uB294%20%uB9C8%uC74C%uC5D0%20%uACF5%uBD80%uD558%uAE30%uB85C%20%uD588%uB2E4.%20%uC608%uC804%20Servlet/JSP%2C%20Spring%uB4F1%uC744%20%uB2E4%uB8F0%20%uB54C%20JAVA%uB97C%20%uD588%uB358%20%uAE30%uC5B5%uC744%20%uB354%uB4EC%uC5B4%20%uAC00%uBA70%28%uB180%uB78D%uAC8C%uB3C4%20%uBC8C%uC368%20%uADF8%uAC1C%203%uB144%uC774%uB098%20%uB410%uB2E4%uB294%20%uAC78%20%uC54C%uC558%uB2E4%29%2C%20%uC548%uB4DC%uB85C%uC774%uB4DC%20%uACF5%uBD80%uB97C%20%uC2DC%uC791%uD558%uB824%20%uD55C%uB2E4.%0A%0A%uC548%uB4DC%uB85C%uC774%uB4DC%20%uAC1C%uBC1C%uC790%20%uB4A4%uC5D0%uC11C%20%uD56D%uC0C1%20%uBCF4%uB358%20%60getApplicationContext%28%29%60%uB77C%uB294%20%uD568%uC218%uAC00%20%uAE30%uC5B5%uB0AC%uB2E4.%20%uC65C%20%uC548%uB4DC%uB85C%uC774%uB4DC%uB294%20%uB9E8%uB0A0%20%uC800%uAC78%20%uB358%uC838%uC918%uC57C%20%uD558%uB294%uAC74%uAC00%20%uB77C%uB294%20%uC0DD%uAC01%uC774%20%uD56D%uC0C1%20%uB4E4%uC5C8%uC9C0%uB9CC%20%uD55C%uBC88%uB3C4%20%uADF8%20%uC774%uC720%uAC00%20%uC81C%uB300%uB85C%20%uAD81%uAE08%uD55C%20%uC801%uC740%20%uC5C6%uC5C8%uB2E4.%20%uADF8%uB0E5%20%uADC0%uCC2E%uC740%20%uCC98%uB9AC%uAC00%20%uB9CE%uC740%20%uAC1C%uBC1C%20%uD50C%uB7AB%uD3FC%uC774%uAD6C%uB9CC%20%uC774%uB77C%uACE0%20%uC0DD%uAC01%uD588%uC744%20%uBFD0.%20%0A%0A%uC548%uB4DC%uB85C%uC774%uB4DC%uC758%20Context%20%uAC1C%uB150%uC740%20%uC548%uB4DC%uB85C%uC774%uB4DC%20%uB514%uBCA8%uB85C%uD37C%uC5D0%20%uB530%uB974%uBA74%2C%20%uC704%uC640%20%uAC19%uB2E4.%20%uD604%uC7AC%20%uC0AC%uC6A9%uB418%uACE0%uC788%uB294%20%uC571%uC5D0%20%uB300%uD55C%20%uC804%uC5ED%20%uD658%uACBD%20%uC815%uBCF4%uB97C%20%uAC00%uC9C4%20%uCE5C%uAD6C%uB77C%uACE0%20%uD55C%uB2E4.%20%uC774%uAC8C%20%uBB34%uC2A8%20%uB72C%uAD6C%uB984%20%uC7A1%uB294%20%uC18C%uB9B0%uAC00.%0A%0A%5B%uC5EC%uAE30%5D%28http%3A//stackoverflow.com/questions/10347184/difference-and-when-to-use-getapplication-getapplicationcontext-getbasecon%29%20%uC2A4%uD14D%uC624%uBC84%uD50C%uB85C%uC6B0%20%uAE00%uC5D0%uC11C%20%uB9CE%uC740%20%uC778%uC0AC%uC774%uD2B8%uB97C%20%uC5BB%uC5C8%uB2E4.%0A%0A%60getApplication%28%29%60%2C%20%60getApplicationContext%28%29%60%2C%20%60getBaseContext%28%29%60%2C%20%60getContext%28%29%60%2C%20%uADF8%uB9AC%uACE0%20%60SomeClass.this%60%20%uAE4C%uC9C0%20%uC774%uAC8C%20%uBB50%uAC00%20%uB2E4%uB978%uC9C0%uC5D0%20%uB300%uD55C%20%uC9C8%uBB38%uC774%uC5C8%uB2E4.%0A%0A%uC989%2C%0A%60%60%60%20java%0AToast.makeText%28LoginActivity.this%2C%20%22LogIn%20successful%22%2C%20Toast.LENGTH_SHORT%29.show%28%29%3B%0AToast.makeText%28getApplication%28%29%2C%20%22LogIn%20successful%22%2C%20Toast.LENGTH_SHORT%29.show%28%29%3B%0AToast.makeText%28getApplicationContext%28%29%2C%20%22LogIn%20successful%22%2C%20Toast.LENGTH_SHORT%29.show%28%29%3B%0AToast.makeText%28getBaseContext%28%29%2C%20%22LogIn%20successful%22%2C%20Toast.LENGTH_SHORT%29.show%28%29%3B%0A%60%60%60%0A%uC774%20%uCE5C%uAD6C%uB4E4%uACFC%0A%0A%60%60%60%0AIntent%20intent%20%3D%20new%20Intent%28getApplicationContext%28%29%2C%20LoginActivity.class%29%3B%0AIntent%20intent%20%3D%20new%20Intent%28MenuPagina.%2C%20LoginActivity.class%29%3B%0AIntent%20intent%20%3D%20new%20Intent%28getBaseContext%28%29%2C%20LoginActivity.class%29%3B%0AIntent%20intent%20%3D%20new%20Intent%28getApplication%28%29%2C%20LoginActivity.class%29%3B%0A%60%60%60%0A%0A%uC774%20%uCE5C%uAD6C%uB4E4%20%uAC01%uAC01%uC774%20%uBB50%uAC00%20%uB2E4%uB978%uC9C0%uC5D0%20%uB300%uD55C%20%uAC83%uC744%20%uAD81%uAE08%uD574%20%uD558%uB294%20%uB4EF%20%uD588%uB2E4.%20%uB098%20%uB610%uD55C%20%uC548%uB4DC%uB85C%uC774%uB4DC%20%uC0DD%uCD08%uBCF4%uC9C0%uB9CC%2C%20%uC5B4%uAE68%20%uB118%uC5B4%uB85C%20%uBCF8%20%uAC8C%20%uC788%uC5B4%uC11C%20%uBB50%uAC00%20%uB2E4%uB978%uC9C0%20%uAD81%uAE08%uD588%uB2E4.%0A%0A%uC548%uB4DC%uB85C%uC774%uB4DC%20%uD504%uB808%uC784%uC6CC%uD06C%uC5D0%uC11C%20Context%uB294%202%uAC00%uC9C0%20%uC885%uB958%uB85C%20%uB098%uB25C%uB2E4.%0A%0A-%20%uC560%uD50C%uB9AC%uCF00%uC774%uC158%20Context%0A-%20%uC561%uD2F0%uBE44%uD2F0%20Context%0A%0A%uC560%uD50C%uB9AC%uCF00%uC774%uC158%20Context%uB294%20%uC560%uD50C%uB9AC%uCF00%uC774%uC158%20%uC790%uCCB4%uC758%20%uC0DD%uBA85%uC8FC%uAE30%28%uB77C%uC774%uD504%uC0AC%uC774%uD074%29%uC5D0%20%uC601%uD5A5%uC744%20%uBC1B%uB294%uB2E4.%20%uB530%uB77C%uC11C%20%uD56D%uC0C1%20%uC560%uD50C%uB9AC%uCF00%uC774%uC158%uC758%20%uC0DD%uBA85%20%uC8FC%uAE30%uC640%20%uD568%uAED8%20%uD55C%uB2E4.%20%0A%uADF8%uB7EC%uB098%20%uC5D1%uD2F0%uBE44%uD2F0%20Context%uB294%20%uC561%uD2F0%uBE44%uD2F0%uC758%20%uB77C%uC774%uD504%uC0AC%uC774%uD074%uACFC%20%uD568%uAED8%20%uC791%uB3D9%uD574%2C%20%60onDestory%28%29%60%uC640%20%uD568%uAED8%20%uC0AC%uB77C%uC9C4%uB2E4.%20%uC989%20%uC561%uD2F0%uBE44%uD2F0%uC5D0%20%uB300%uD55C%20%uD658%uACBD%20%uC815%uBCF4%uB4E4%uC774%20Context%uC5D0%20%uC788%uACE0%2C%20%uC774%20Context%28%uC5D1%uD2F0%uBE44%uD2F0%uC758%29%uC5D0%20Intent%uB97C%20%uD1B5%uD574%20%uB2E4%uB978%20%uC561%uD2F0%uBE44%uD2F0%uB97C%20%uB744%uC6B0%uBA74%2C%20%uC5D1%uD2F0%uBE44%uD2F0%20%uC2A4%uD0DD%uC774%20%uC313%uC774%uAC8C%20%uB418%uB294%20%uAC83%uC774%uB2E4.%20%0A%0A%3E%20%60LoginActivity.this%60%20though%20its%20referring%20to%20your%20own%20class%20which%20extends%20Activity%20class%20but%20the%20base%20class%20%28Activity%29%20also%20extends%20Context%20class%2C%20so%20it%20can%20be%20used%20to%20offer%20activity%20context.%0A%3E%20%60getApplication%28%29%60%20though%20its%20referring%20to%20Application%20object%20but%20the%20Application%20class%20extends%20Context%20class%2C%20so%20it%20can%20be%20used%20to%20offer%20application%20context.%0A%3E%20%20%60getApplicationContext%28%29%60%20offers%20application%20context.%0A%3E%20%20%60getBaseContext%28%29%60%20offers%20activity%20context.%0A%0A%uC138%uBD80%uC801%uC778%20%uC124%uBA85%uC778%uB370%2C%20%uC5EC%uAE30%uC11C%20%uC911%uC694%uD55C%20%uAC83%uC740%20%uC548%uB4DC%uB85C%uC774%uB4DC%uC758%20Avtivity%uC640%20Apllication%20class%uB4E4%uC774%20%uBAA8%uB450%20%60Context%60%uD074%uB798%uC2A4%uB97C%20%uC0C1%uC18D%uBC1B%uC544%20%uB9CC%uB4E4%uC5B4%uC84C%uB2E4%uB294%20%uAC83%uC774%uB2E4.%20%uADF8%uB798%uC11C%20%60LoginActivity.this%60%uB77C%uACE0%20%uD558%uB294%20%uC21C%uAC04%2C%20%60this%60%uC5D0%20%uD574%uB2F9%uD558%uB294%20%60LoginActivity%60%uC778%uC2A4%uD134%uC2A4%uAC00%20%uD30C%uB77C%uB9E4%uD130%uB85C%20%uC804%uB2EC%uB418%uACE0%2C%20%uC774%uAC83%uC740%20%60Context%60%uB97C%20%uC0C1%uC18D%uBC1B%uC558%uAE30%uC5D0%20%60Context%60%uC774%uBA70%2C%20%uB530%uB77C%uC11C%20%uC544%uBB34%uB7F0%20%uBB38%uC81C%20%uC5C6%uC774%20%uC791%uB3D9%uD558%uAC8C%20%uB418%uB294%20%uAC83%uC774%uB2E4.%20%0A%0A%3E%20Tips%3A%20%uBDF0%uB97C%20%uC218%uC815%uD558%uAC70%uB098%20%uD560%uB54C%uB294%20%60Activity%20Context%60%uB97C%20%uB098%uBA38%uC9C0%20%uACBD%uC6B0%uC5D0%uB294%20%60Application%20Context%60%uB97C%20%uC0AC%uC6A9%uD558%uB77C.%0A%0A%uB2E4%uC74C%uC740%20%uC561%uD2F0%uBE44%uD2F0%uC758%20%uC0DD%uBA85%uC8FC%uAE30%uC5D0%20%uB300%uD574%uC11C%20%uACF5%uBD80%uB97C%20%uD574%uBCF4%uC544%uC57C%20%uACA0%uB2E4.


comments powered by Disqus
태그, 트랙백, 검색 상자 토글
    1   2   3     >>