Programming

getApplication (), getApplicationContext (), getBaseContext () 및 someClass.this를 사용할 때의 차이점

procodes 2020. 7. 21. 21:51
반응형

getApplication (), getApplicationContext (), getBaseContext () 및 someClass.this를 사용할 때의 차이점


나는 안드로이드에 새로운 그리고 난의 차이를 이해하기 위해 노력하고있어 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);

토스트의도 , 둘 다 컨텍스트에 대한 참조가 필요합니다 . 그리고 getApplication , getApplicationContext , LoginActivity.thisgetBaseContext 모두 컨텍스트에 대한 참조를 제공합니다.

이제 혼동되는 것은 다른 맥락과 그들의 특정 사용에 대한 선언입니다. 일을 간단하게하려면 Android 프레임 워크에서 사용 가능한 두 가지 유형의 컨텍스트를 계산해야합니다.

  1. 응용 문맥
  2. 활동 상황

응용 프로그램 컨텍스트는 응용 프로그램 수명주기에 연결되며 응용 프로그램 수명 동안 항상 동일합니다. 따라서 Toast 를 사용하는 경우 응용 프로그램의 어느 곳에서나 토스트를 올릴 수 있고 창에 연결되지 않기 때문에 응용 프로그램 컨텍스트 또는 활동 컨텍스트 (둘 다)를 사용할 수 있습니다.

활동 컨텍스트는 활동의 라이프 사이클에 첨부되며 활동 onDestroy()이 발생 하면 소멸 될 수 있습니다 . 새 활동을 시작 하려면 새로운 실행 활동이 활동 스택 측면에서 현재 활동에 연결되도록 의도 에서 활동 컨텍스트를 사용해야합니다 . 그러나 응용 프로그램의 컨텍스트를 사용하여 새 활동을 시작할 수도 있지만 Intent.FLAG_ACTIVITY_NEW_TASK새 작업으로 처리하기 위해 플래그를 설정해야합니다 .

이제 귀하의 사례를 언급하십시오.

LoginActivity.this 액티비티 클래스는 확장하지만 기본 클래스 (액티비티)도 컨텍스트 클래스를 확장하는 자체 클래스를 언급하므로 액티비티 컨텍스트를 제공하는 데 사용할 수 있습니다.

getApplication() Application 객체를 참조하지만 Application 클래스는 Context 클래스를 확장하므로 응용 프로그램 컨텍스트를 제공하는 데 사용할 수 있습니다.

getApplicationContext() 응용 프로그램 컨텍스트를 제공합니다.

getBaseContext() 활동 컨텍스트를 제공합니다.

팁 : 조작해야 할 때마다 Activity-ContextViews 로 이동하십시오 . 그렇지 않으면 Application-Context 로 충분합니다.


Waqas의 답변은 매우 명확하고 완전하지만 thisvs. getBaseContext()또는 getApplication()vs. 의 차이점을 더 명확히하고 싶습니다 getApplicationContext(). 모두 ActivityApplication확장되지 Context자체하지만 ContextWrapper이다,

"프록시 구현은 Context단순히 모든 호출을 다른 호출에 위임합니다 Context".

"실제"컨텍스트는를 사용하여 얻는 것 getBaseContext()입니다.

따라서 this(for Activity) 및 getBaseContext()둘 다 활동 컨텍스트를 제공 하지만

  • (a) 동일한 객체 ( this != getBaseContext())를 참조하지 마십시오
  • (b) 호출 this이 여분의 간접적 수준을 거치기 때문에 컨텍스트를 호출하는 것이 약간 덜 효율적입니다. 그래도 그것이 실질적인 차이를 만드는 것은 의심 스럽다.

같은 논리가 getApplication()vs에 적용됩니다 getApplicationContext().


LoginActivity.this 

위의 행은 분명히 컨텍스트 인 활동입니다. 이것은 AlertDialogs를 만들 때 사용됩니다 ... 어떤 곳에서는 활동 컨텍스트를 사용해야합니다 ...

getApplication()

여기에서 make 텍스트 메소드에는 Context 및 Application 자체 구현이 필요합니다. Context

getApplicationContext()

이것은 Context응용 프로그램이 종료 될 때까지 유지 되므로 가장 선호되는 방법 입니다.

getBaseContext()

이 컨텍스트는 위젯 및보기에 사용 가능합니다.

그러나 그들 모두는 Context 객체를 제공하고 다른 것은 제공 하지 않습니다.


Class. 클래스가 활동을 확장하는 경우 사용 getapplication () 사용 응용 프로그램을 참조하고 응용 프로그램이 응용 프로그램 컨텍스트를 확장합니다. getbasecontext () 활동 컨텍스트 컨텍스트를 참조하십시오 활동 컨텍스트를 참조하십시오.

참고 URL : https://stackoverflow.com/questions/10347184/difference-and-when-to-use-getapplication-getapplicationcontext-getbasecon

반응형