2015-01-31 3 views
1

빌드하고있는 Android 앱에서 어댑터 및 도우미에 싱글 톤 패턴을 사용하는 것에 대해 생각하고 있지만 Java 가비지 수집 및 정적 속성 (예 : static FooBar instance)이 메모리 사용에 미치는 영향에 너무 익숙하지 않습니다.Android에서 싱글 톤 패턴을 사용하면 메모리 사용에 어떤 영향을 줍니까?

안드로이드 애플 리케이션에 큰 영향을 미치므로 사용하지 말아야합니까?

+0

코드에 따라 다릅니다. 같은 일을하는 인스턴스가 여러 개있을 가능성이있는 경우, 싱글 톤은 동일한 객체의 여러 인스턴스를 저장하지 않기 때문에 메모리를 덜 사용합니다. – MeetTitan

+1

사람들은 활동 라이프 사이클을 이해하지 못하기 때문에 안드로이드는 변수를 확보하기 위해 "결정"합니다. 그렇지 않습니다. 그것은 가비지 컬렉터가 다른 것과 같습니다. 개체에 대한 하나 이상의 참조가있는 경우 해당 개체는 수집되지 않습니다. – Simon

답변

4

"영향 메모리 사용량"의 의미에 따라 다릅니다. 객체는 단일 패턴에 의해 시행되는 인스턴스가 하나뿐이기 때문에 크거나 작지 않습니다. 그런 의미에서 차이는 없습니다.

개체가 메모리에 여러 개가 아닌 하나의 복사본 만 있으면된다는 의미라면 그렇습니다.

보통 사람들이 의미하는 것은, 싱글 톤이 얼마나 오래 살고 있습니까? 앱이 백그라운드에있을 때 메모리를 차지하지 않습니까?

static 회원은 Class의 인스턴스에 연결되며 다시 ClassLoader에 연결됩니다. 따라서 싱글 톤은 ClassLoader만큼 오래 살아 있습니다. Android에서 앱의 ClassLoader은 이 아니라 onDestroy이 아니므로 앱이 백그라운드에 있더라도 사용자가 메모리를 누르고 있음을 의미합니다.

3

다른 사람들이 말했듯이, 그것은 달려 있습니다. 싱글 톤이 가비지 수집 될 수있는 객체에 대한 참조를 보유하고있는 경우가 좋지 않을 수 있습니다. 개체에 많은 참조가 있거나 큰 개체에 대한 참조가 있으면 필요없는 메모리를 사용할 수 있습니다. 약한 참조를 사용하여이 문제를 해결할 수 있지만 가비지 수집이 필요한 경우 필요할 때 개체를 다시 작성하는 코드가 있어야합니다. 싱글 톤 패턴을 사용할 수 없기 때문에 (적어도 잠재적으로) 가비지 수집이 가능하지만 객체를 생성하고 버리는 것은 희생됩니다. 최상의 솔루션은 개체의 세부 사항과 사용법에 따라 다릅니다. 항상 피할 수있는 한 가지 방법은보기와 같은 UI 개체에 대한 참조를 붙잡는 것입니다.

관련 문제