2014-06-21 3 views
2

나는 내 응용 프로그램에서 꽤 자주 Context을 사용하며 자주 메모리 누수 및 기타 문제가 발생한다고 들었습니다. 그래서 몇 가지 관련 질문이 있습니다. 가능하면 항상 일반적으로 onReceive() 경우 같은 생성자 또는 메서드에서 매개 변수로 오는 Activity 또는 Context 객체에 Fragment 또는 thisgetActivity()와 같이, ActivitygetApplicationContext()를 사용하거나해야합니다 사용하는 것이 가장 좋습니다 무엇 Context컨텍스트의 올바른 사용

나는 Broadcast Receiver 안에 있습니까?

Context 관련 개체를 출시하는 방법은 무엇입니까? 더 이상 필요하지 않은 경우 을 Context 개체에 대한 참조를 보유하는 변수에 할당하면됩니까?

Toast, ProgressDialog, TextView 또는 다른 객체를 인스턴스화하는 데 Context 일부를 사용한 경우 어떻게됩니까? 메모리 누출을 피하기 위해 이러한 객체에 대한 참조를 릴리스해야합니까?

Context 개체를 전역 변수로 유지하는 것이 좋습니까? 왜냐하면 저는 종종 내부 클래스 나 메서드에서 필요하기 때문입니다.

관련 주제에 대한 명확한 설명, 설명 및 링크를 얻길 바랍니다.

답변

1

해당 구성 요소에 대해 항상 Context 참조를 사용하십시오. 이는 ActivityService에 대해 this을 사용한다는 것을 의미합니다. BroadcastReceiver{@param context}을 사용하십시오.

만 (예를 들어, 단지 활동 컨텍스트가 다른 활동을 시작할 수 있습니다) Application#onCreate()

+0

'조각'안에 무엇을 사용합니까? – Salivan

+1

'Fragment # getActivity()'사용 –

+0

전역 변수에'Context'를 저장하는 방법은 나중에 내부 클래스'OnClickListener'에서 필요합니까? – Salivan

3

다른 맥락에서 init을해야하는 다른 기능이 싱글에 대한 getApplicationContext()를 사용합니다. 컨텍스트 사용하는 방법에 대한

확인 위대한 기사 : 일반적인 함정의 http://www.doubleencore.com/2013/06/context/

하나는 AsyncTask를에 활동 컨텍스트를 사용하는 예입니다. 여기서 중요한 문제는 AsyncTask가 여전히 작동하는 동안 액티비티가 완료되고 컨텍스트가 파괴 될 수 있다는 것입니다. 모든 조작에 컨텍스트를 사용하려고하면 (자) 실패합니다. 이 경우 생성자 (또는 다른 메서드)에서받은 컨텍스트를 사용하여 Application 컨텍스트를 검색하는 것이 훨씬 좋습니다.

+0

'Activity'와'AsyncTask'의 멋진 예제. 고맙습니다. – Salivan

+1

AsyncTask 함정에 대한이 기사를 확인하십시오. http://blog.danlew.net/2014/06/21/the-hidden-pitfalls-of-asynctask/ –

+0

작성된 알림을 눌러 '활동'을 시작하는 방법은 어떻습니까? '서비스'에서 시작 했습니까?거기에는'Activity' 컨텍스트가 없습니다.'Activity' 컨텍스트 만이 다른 Activity를 시작할 수 있다고 말했기 때문에'Service' 내에'Activity'를 시작하는'Intent'를 어떻게 기술할까요? – Salivan