활동 상황과 응용 상황의 차이
이것은 나를 혼란스럽게 만들었습니다 .Android 2.1-r8 SDK에서 이것을 사용하고있었습니다.
ProgressDialog.show(getApplicationContext(), ....);
또한
Toast t = Toast.makeText(getApplicationContext(),....);
과 getApplicationContext()
충돌을 사용하면 ....이 질문으로 이어집니다.ProgressDialog
Toast
'컨텍스트'라는 문구를 공유하더라도 활동 컨텍스트와 애플리케이션 컨텍스트의 실제 차이점은 무엇입니까?
둘 다 Context의 인스턴스 이지만 응용 프로그램 인스턴스는 응용 프로그램의 수명주기에 연결되고 Activity 인스턴스는 Activity의 수명주기에 연결됩니다. 따라서 응용 프로그램 환경에 대한 다른 정보에 액세스 할 수 있습니다.
getApplicationContext 에서 문서를 읽는 경우 라이프 사이클이 현재 컨텍스트와 분리 된 컨텍스트가 필요한 경우에만이를 사용해야한다는 점을 참고하십시오. 이것은 귀하의 예제 중 하나에 적용되지 않습니다.
활동 컨텍스트에는 해당 호출을 완료하는 데 필요한 현재 활동에 대한 정보가있을 수 있습니다. 정확한 오류 메시지가 표시되면 정확히 필요한 것을 가리킬 수 있습니다.
그러나 적절한 이유가없는 한 일반적으로 활동 컨텍스트를 사용하십시오.
이 테이블이 다른 유형의 컨텍스트를 사용할시기를 결정하는 데 매우 유용하다는 것을 알았습니다.
- 애플리케이션은 여기에서 활동을 시작할 수 있지만 새 태스크를 작성해야합니다. 이는 특정 사용 사례에 맞을 수 있지만 응용 프로그램에서 비표준 백 스택 동작을 만들 수 있으며 일반적으로 권장되거나 권장되지 않습니다.
- 이것은 합법적이지만 인플레이션은 응용 프로그램에 정의 된 것이 아니라 실행중인 시스템의 기본 테마로 수행됩니다.
- Android 4.2 이상에서 고정 브로드 캐스트의 현재 값을 얻는 데 사용되는 수신자가 널인 경우 허용됩니다.
원본 기사는 여기에 있습니다 .
이것은 분명히 API 디자인의 결함입니다. 우선, 활동 컨텍스트와 애플리케이션 컨텍스트는 완전히 다른 객체이므로 컨텍스트가 사용되는 메소드 매개 변수는 상위 클래스 Context를 사용하는 대신 직접 ApplicationContext
또는 Activity
직접 사용해야합니다 . 두 번째로, 의사는 명시 적으로 사용할 컨텍스트를 지정해야합니다.
내가 생각하는 이유 는 활동이 파괴 된 후에 대화 상자가 남아있을 수 없으므로 ProgressDialog
활동을 첨부하는 것입니다. 따라서 활동 과 함께 파괴되는 ProgressDialog
통과 this
(ActivityContext)가 필요 하지만 활동이 끝난 후에도 ApplicationContext는 남아 있어야합니다. 파괴됨.
모든 것이 보여주기 위해 화면이 필요할 때 (버튼, 대화, 레이아웃 ...) 컨텍스트 활동을 사용해야하고, 모든 것이 보여 주거나 처리하기 위해 화면이 필요하지 않다고 생각합니다 (토스트, 전화 서비스, 연락처 ...). 응용 프로그램 컨텍스트를 사용할 수 있습니다
자체적으로 전역 범위를 갖는 컨텍스트에 연결된 것이 필요한 경우 getApplicationContext ()를 사용하십시오.
Activity를 사용하는 경우 새 Activity 인스턴스에는 이전 Activity에 대한 암시 적 참조가있는 참조가 있으며 기존 Activity는 가비지 수집 할 수 없습니다.
'Programing' 카테고리의 다른 글
BeanFactory와 ApplicationContext (0) | 2020.04.25 |
---|---|
Java에서 사전을 어떻게 작성합니까? (0) | 2020.04.25 |
Base64로 문자열을 인코딩하려면 왜 'b'가 필요합니까? (0) | 2020.04.24 |
grep 및 교체 방법 (0) | 2020.04.24 |
2 시간마다 cron 작업을 실행하는 방법 (0) | 2020.04.24 |