Programing

활동 상황과 응용 상황의 차이

lottogame 2020. 4. 24. 08:03
반응형

활동 상황과 응용 상황의 차이


이것은 나를 혼란스럽게 만들었습니다 .Android 2.1-r8 SDK에서 이것을 사용하고있었습니다.

ProgressDialog.show(getApplicationContext(), ....);

또한

Toast t = Toast.makeText(getApplicationContext(),....);

getApplicationContext()충돌을 사용하면 ....이 질문으로 이어집니다.ProgressDialogToast

'컨텍스트'라는 문구를 공유하더라도 활동 컨텍스트와 애플리케이션 컨텍스트의 실제 차이점은 무엇입니까?


둘 다 Context의 인스턴스 이지만 응용 프로그램 인스턴스는 응용 프로그램의 수명주기에 연결되고 Activity 인스턴스는 Activity의 수명주기에 연결됩니다. 따라서 응용 프로그램 환경에 대한 다른 정보에 액세스 할 수 있습니다.

getApplicationContext 에서 문서를 읽는 경우 라이프 사이클이 현재 컨텍스트와 분리 된 컨텍스트가 필요한 경우에만이를 사용해야한다는 점을 참고하십시오. 이것은 귀하의 예제 중 하나에 적용되지 않습니다.

활동 컨텍스트에는 해당 호출을 완료하는 데 필요한 현재 활동에 대한 정보가있을 수 있습니다. 정확한 오류 메시지가 표시되면 정확히 필요한 것을 가리킬 수 있습니다.

그러나 적절한 이유가없는 한 일반적으로 활동 컨텍스트를 사용하십시오.


이 테이블이 다른 유형의 컨텍스트를 사용할시기를 결정하는 데 매우 유용하다는 것을 알았습니다.

여기에 이미지 설명을 입력하십시오

  1. 애플리케이션은 여기에서 활동을 시작할 수 있지만 새 태스크를 작성해야합니다. 이는 특정 사용 사례에 맞을 수 있지만 응용 프로그램에서 비표준 백 스택 동작을 만들 수 있으며 일반적으로 권장되거나 권장되지 않습니다.
  2. 이것은 합법적이지만 인플레이션은 응용 프로그램에 정의 된 것이 아니라 실행중인 시스템의 기본 테마로 수행됩니다.
  3. Android 4.2 이상에서 고정 브로드 캐스트의 현재 값을 얻는 데 사용되는 수신자가 널인 경우 허용됩니다.

원본 기사는 여기에 있습니다 .


이것은 분명히 API 디자인의 결함입니다. 우선, 활동 컨텍스트와 애플리케이션 컨텍스트는 완전히 다른 객체이므로 컨텍스트가 사용되는 메소드 매개 변수는 상위 클래스 Context를 사용하는 대신 직접 ApplicationContext또는 Activity직접 사용해야합니다 . 두 번째로, 의사는 명시 적으로 사용할 컨텍스트를 지정해야합니다.


내가 생각하는 이유 는 활동이 파괴 된 후에 대화 상자가 남아있을 수 없으므로 ProgressDialog활동을 첨부하는 것입니다. 따라서 활동 과 함께 파괴되는 ProgressDialog통과 this(ActivityContext)가 필요 하지만 활동이 끝난 후에도 ApplicationContext는 남아 있어야합니다. 파괴됨.


모든 것이 보여주기 위해 화면이 필요할 때 (버튼, 대화, 레이아웃 ...) 컨텍스트 활동을 사용해야하고, 모든 것이 보여 주거나 처리하기 위해 화면이 필요하지 않다고 생각합니다 (토스트, 전화 서비스, 연락처 ...). 응용 프로그램 컨텍스트를 사용할 수 있습니다


자체적으로 전역 범위를 갖는 컨텍스트에 연결된 것이 필요한 경우 getApplicationContext ()를 사용하십시오.

Activity를 사용하는 경우 새 Activity 인스턴스에는 이전 Activity에 대한 암시 적 참조가있는 참조가 있으며 기존 Activity는 가비지 수집 할 수 없습니다.

참고 URL : https://stackoverflow.com/questions/4128589/difference-between-activity-context-and-application-context

반응형