2011-05-10 3 views
1

안드로이드에서 참조 할 "context"가 필요하거나 여러 클래스에 "context"를 전달해야합니다. 이 목적을 위해 "컨텍스트"와 다른 모든 클래스 액세스 컨텍스트를 유지하는 정적 클래스를 구현했습니다.컨텍스트를 정적 클래스를 통해 효율적으로 전달하는지 여부

//let's say I have a static class DataHolder 
//and my main acitivity i.e. whose context need to be refrenced 

public class DataHolder{ 
     public static Context context; 
    } 

public class MainActivity extends Activity{ 
    public void onCreate(Bundle bundle){ 
    DataHolder.context = getApplicationContext(); 
    } 
} 

그래서, 구현되는 확인이 과정은 또는 안드로이드 응용 프로그램에서 참조하는 올바른 방법이 아니다.

+0

통찰력을 가진 Alex와 Vicente. 나는 그것을 그렇게 보지 못했습니다. 그러나 나는 한 가지 질문을하고 싶습니다. 활동 파괴 또는 오리엔테이션 변경 또는 활동이 더 이상 필요없는 그런 종류의 것이 있다면, 정적 refrence null 값을 주면 여전히 메모리 누수가 발생합니다. 어쨌든 두 분께 답장을 보내 주셔서 다시 한번 감사드립니다. – laaptu

답변

4

여기에있는 문제는 효율성에 관한 것이 아니라 컨텍스트를 정적으로 저장하는 고유 위험에 관한 것입니다.

많은 상황에서 컨텍스트가 변경 될 수 있습니다. 가장 가능성있는 컨텍스트는 장치 방향을 변경하므로 항상 릴레이하지 않아야합니다. 컨스트럭터를 컨스트럭터에 전달하여 각 클래스에 전달해야한다고 생각합니다. (약간 복잡 할 수도 있지만 사용하지 않는 곳에서 코드를 재 설계해야합니다.)

최악의 시나리오에서는 가능한 한 자주 업데이트해야합니다. 그러나 다시 한번, 항상 액세스 할 수있게하는 데 필요한 점은 무엇입니까? 나는 위험이 게으름의 가치가 없다고 생각한다. (유감스럽게 생각한다면 미안하다.

0

메모리 누수가 발생할 수 있으므로 반드시 피해야합니다. 읽기 : Avoiding memory leaks

이 뷰는 전체 활동, 따라서 당신의 활동에 들고 아무것도에 대한 참조가 있음을 의미합니다; 일반적으로 전체 View 계층과 모든 리소스. 따라서 컨텍스트 ("누수"의미를 누설하여 참조를 유지하여 GC가 그것을 수집하지 못하게하면) 많은 메모리가 누출됩니다. 조심하지 않으면 전체 활동을 누출하는 것이 정말 쉽습니다.

관련 문제