getApplication() vs. getApplicationContext()
저는 이것에 대한 만족스러운 답을 찾을 수 없었습니다. 그래서 시작합니다: 어떻게 된 일입니까?Activity/Service.getApplication()그리고.Context.getApplicationContext()?
응용 프로그램에서 둘 다 동일한 개체를 반환합니다.ActivityTestCase하지만, 애플리케이션을 조롱하는 것은 만들 것입니다.getApplication()조롱과 함께 돌아오지만,getApplicationContext여전히 다른 컨텍스트 인스턴스(Android에서 주입한 인스턴스)를 반환합니다. 그런 일부러 그런 건가요?
저는 애초에 그 차이를 이해하지도 못합니다.테스트 스위트 외부에서 두 호출 모두 다른 객체로 응답하는 경우가 있습니까?언제 그리고 왜?게다가, 왜?getApplication에정된에 정의되어 .Activity그리고.Service하지만 그렇지는 않습니다.Context언제 어디서나 유효한 애플리케이션 인스턴스를 사용할 수 있어야 하지 않습니까?
매우 흥미로운 질문입니다.저는 그것이 주로 의미적인 의미라고 생각하고, 또한 역사적인 이유 때문일 수도 있습니다.
현재 Android 활동 및 서비스 구현에서는getApplication()그리고.getApplicationContext()동일한 개체를 반환합니다. 이러한 개체가 항상 적용된다는 보장은 없습니다(예: 특정 공급업체 구현).
따라서 매니페스트에 등록한 응용프로그램 클래스를 원할 경우에는 절대로 호출해서는 안 됩니다.getApplicationContext()애플리케이션 인스턴스가 아닐 수 있으므로(테스트 프레임워크에서 분명히 경험한) 애플리케이션에 캐스트합니다.
왜 그럴까요?getApplicationContext()애초에 존재합니까?
getApplication()클래스에서만 할 수 있는 , "는 활동 클래스와 클래스에서만 사용할 수 있습니다.getApplicationContext()컨텍스트 클래스에서 선언됩니다.
한합니다. 메서드에서 브로드캐스트 쓸 때, 은 오직 Receive에 있는 실한만아는지컨: 니트메그것다니스텍의있수할브주호코습다오니출만때쓸당수직은신를드에기스캐은트신드서로제컨가텍트진스서에드어로미지합를가▁call▁thatrece▁in▁receiver▁only,▁can▁one있수▁actually▁when▁you▁thing할▁:호▁means,▁code습▁on다그니만오출직것▁broadcast은rece신▁ingetApplicationContext()에서 합니다.
Android 코드를 보면 연결된 활동이 기본 컨텍스트와 응용 프로그램을 수신하는 것을 볼 수 있습니다. 이러한 활동은 서로 다른 매개 변수입니다. getApplicationContext() 여러분, 위자에전다니합으로 .baseContext.getApplicationContext().
한 가지 더 말씀드리겠습니다. 설명서에는 대부분의 경우 애플리케이션을 하위 분류할 필요가 없다고 나와 있습니다.
일반적으로 하위 분류할 필요가 없습니다.
Application대부분의 경우 정적 싱글 버튼은 보다 모듈식으로 동일한 기능을 제공할 수 있습니다.만약 를 들어, 방송) 하다면, 은 " " " " " " " " " " , " " " " " " , " " " " " " " " " " " " 이 수 .Context으로 내적으사는을 사용하는.Context.getApplicationContext()싱글톤을 처음 구성할 때.
이것이 정확하고 정확한 대답이 아니라는 것을 알지만, 그래도 당신의 질문에 답이 됩니까?
그것은 문맥 포장과 관련이 있는 것 같습니다.에서 파생된 대부분의 클래스는 실제로는 다른 컨텍스트로 위임되며 래퍼에 의한 변경 사항이 있을 수 있습니다.
컨텍스트는 조롱과 프록시를 지원하는 일반적인 추상화입니다.많은 컨텍스트가 와 같은 제한된 수명 개체에 바인딩되므로 향후 알림 등록과 같은 목적으로 더 오래 지속되는 컨텍스트를 가져올 수 있는 방법이 필요합니다.이는 에 의해 달성됩니다. 논리적 구현은 전역 개체를 반환하는 것이지만 컨텍스트 구현이 래퍼 또는 프록시를 대신 적절한 수명으로 반환하는 것을 막지는 못합니다.
활동 및 서비스는 보다 구체적으로 개체와 연결됩니다.이것의 유용성은 당신이 매니페스트에서 파생된 사용자 정의 클래스를 만들고 등록할 수 있다는 것입니다.Application그리고 당신이 파생된 것에 캐스팅할 수 있는 특정 유형의 특정 객체를 반환하거나 반환할 것을 확신합니다.Application사용자 정의 목적에 따라 클래스 및 사용합니다.
다른말하면로,하면,getApplication()▁an다니▁guarant를 반환하도록 됩니다.Application에 대반, 면반getApplicationContext()대신 프록시를 반환할 수 있습니다.
와 비교합니다.
getApplication글로벌 응용 프로그램 상태를 관리하고 및 같은 일부 장치 상황에 대응할 수 있는 개체를 반환합니다.
getApplicationContext글로벌 응용 프로그램 컨텍스트를 반환합니다. 예를 들어, 활동이 종료될 때 활동 컨텍스트가 Android에 의해 파괴되거나 사용할 수 없게 될 수 있습니다.존재하는 가능한 로 유지됩니다(▁the▁remains▁a▁exists▁tied않음▁applic(▁not있지ation▁context▁to▁all▁availablewhich▁is).Activity따라서 알림과 같이 일시적인 UI 개체와 독립적으로 장기간 사용할 수 있는 컨텍스트를 필요로 하는 경우에 이 기능을 사용할 수 있습니다.
코드가 동일한지 여부에 따라 다를 수 있습니다. 일반적인 사용에서는 다를 것으로 예상합니다.
질문에 대답하려면 getApplication()은 Application 개체를 반환하고 getApplicationContext()는 Context 개체를 반환합니다.사용자의 관찰에 따르면, 두 가지 모두의 컨텍스트가 동일하다고 가정합니다(즉, 응용 프로그램 클래스가 기본 클래스의 컨텍스트 부분을 채우기 위해 후자 함수를 호출하거나 동일한 작업이 수행됨).컨텍스트가 필요한 경우 어떤 기능을 호출하는지는 중요하지 않습니다.
언급URL : https://stackoverflow.com/questions/5018545/getapplication-vs-getapplicationcontext
'programing' 카테고리의 다른 글
| Node.jsfs.readdir 재귀 디렉터리 검색 (0) | 2023.06.01 |
|---|---|
| HTML 페이지에서 스크롤 막대 숨기기 (0) | 2023.06.01 |
| Jest를 사용하여 단일 파일을 테스트하려면 어떻게 해야 합니까? (0) | 2023.06.01 |
| ng: angular-cli를 사용하여 새 프로젝트를 만드는 동안 명령을 찾을 수 없습니다. (0) | 2023.06.01 |
| 레일 3 데이터 유형? (0) | 2023.06.01 |