2012-12-10 4 views
2

활동에서 정적 객체를 사용하지 않아야하거나 활동에 정적 호출을하지 않아야하는 이유는 무엇입니까?활동의 정적 물건

+0

나는 그걸로 아무런 문제가 보이지 않습니다 ... 당신이 정적 개체에 활동에 정적이 아닌 것에 대한 참조를 제공하지 않는다면 괜찮을 것입니다. – gsingh2011

답변

3

더 합리적인 진술은 안드로이드에서 정적 변수를 사용하는 것에 매우주의해야한다고 말하는 것입니다.

응용 프로그램을 사용할 수는 있지만 응용 프로그램이 OS에 의해 종료 될 수 있으며 사용자가 응용 프로그램으로 돌아 왔을 때 (즉 최신 응용 프로그램 목록에서) 다시 시작된다는 점에 유의하십시오. 그 결과 응용 프로그램에 많은 다른 진입 점이 생기며 정적 변수가 초기화된다고 가정 할 수 없습니다.

예를 들어, 응용 프로그램의 첫 번째 활동에 정적 변수를 설정하고 항상 그것이 설정된다고 가정하면 큰 실수입니다.

Activity에 대한 참조가있는 항목을 정적 변수로 저장하는 것은주의해야합니다. 이는 메모리를 불필요하게 소비하는 일반적인 원인이되기 때문입니다. 예를 들어, 정적 변수에 View을 저장하는 것은 거의 확실한 실수입니다. 전체 활동이 지워지 지 않으면 가비지 수집되지 않도록하기 때문입니다.

+0

한 활동에서 설정된 정적 변수가 다른 변수가 포어 그라운드에있을 때 설정 해제 될 수있는 이유는 무엇인지 궁금했습니다. 이것을 발견하기 전에 정적 멤버가 가비지 수집되지 않을 것이라는 인상하에 있었고 삭제 된 다른 이유를 생각할 수 없습니다. 아직 ... 당신 말이 맞아. 그들은 할 수있다. (???) – Turnsole

+2

정적 변수가 가비지 수집되지 않는 것은 사실이지만 OS가 전체 응용 프로그램을 종료하여 메모리를 비우면 재설정 될 수 있습니다. 이는 개발자가 예기치 못한 결과를 많이 낳을 수 있습니다. 예를 들어 최근 앱 목록이나 뒤로 버튼을 사용하는 사용자는 기본 활동 이외의 일부 활동에서 애플리케이션을 시작할 수 있습니다. – wsanville

1

메모리 누수의 가능성을 높일 필요가없는 것들을 정적으로 만드는 것을 피하는 것이 좋습니다. 항상 일부 데이터에 대한 참조를 보유하고 있다면 GC가이를 해제 할 수 없습니다.