빌드하고있는 Android 앱에서 어댑터 및 도우미에 싱글 톤 패턴을 사용하는 것에 대해 생각하고 있지만 Java 가비지 수집 및 정적 속성 (예 : static FooBar instance
)이 메모리 사용에 미치는 영향에 너무 익숙하지 않습니다.Android에서 싱글 톤 패턴을 사용하면 메모리 사용에 어떤 영향을 줍니까?
안드로이드 애플 리케이션에 큰 영향을 미치므로 사용하지 말아야합니까?
빌드하고있는 Android 앱에서 어댑터 및 도우미에 싱글 톤 패턴을 사용하는 것에 대해 생각하고 있지만 Java 가비지 수집 및 정적 속성 (예 : static FooBar instance
)이 메모리 사용에 미치는 영향에 너무 익숙하지 않습니다.Android에서 싱글 톤 패턴을 사용하면 메모리 사용에 어떤 영향을 줍니까?
안드로이드 애플 리케이션에 큰 영향을 미치므로 사용하지 말아야합니까?
"영향 메모리 사용량"의 의미에 따라 다릅니다. 객체는 단일 패턴에 의해 시행되는 인스턴스가 하나뿐이기 때문에 크거나 작지 않습니다. 그런 의미에서 차이는 없습니다.
개체가 메모리에 여러 개가 아닌 하나의 복사본 만 있으면된다는 의미라면 그렇습니다.
보통 사람들이 의미하는 것은, 싱글 톤이 얼마나 오래 살고 있습니까? 앱이 백그라운드에있을 때 메모리를 차지하지 않습니까?
static
회원은 Class
의 인스턴스에 연결되며 다시 ClassLoader
에 연결됩니다. 따라서 싱글 톤은 ClassLoader
만큼 오래 살아 있습니다. Android에서 앱의 ClassLoader
은 이 아니라 onDestroy
이 아니므로 앱이 백그라운드에 있더라도 사용자가 메모리를 누르고 있음을 의미합니다.
다른 사람들이 말했듯이, 그것은 달려 있습니다. 싱글 톤이 가비지 수집 될 수있는 객체에 대한 참조를 보유하고있는 경우가 좋지 않을 수 있습니다. 개체에 많은 참조가 있거나 큰 개체에 대한 참조가 있으면 필요없는 메모리를 사용할 수 있습니다. 약한 참조를 사용하여이 문제를 해결할 수 있지만 가비지 수집이 필요한 경우 필요할 때 개체를 다시 작성하는 코드가 있어야합니다. 싱글 톤 패턴을 사용할 수 없기 때문에 (적어도 잠재적으로) 가비지 수집이 가능하지만 객체를 생성하고 버리는 것은 희생됩니다. 최상의 솔루션은 개체의 세부 사항과 사용법에 따라 다릅니다. 항상 피할 수있는 한 가지 방법은보기와 같은 UI 개체에 대한 참조를 붙잡는 것입니다.
코드에 따라 다릅니다. 같은 일을하는 인스턴스가 여러 개있을 가능성이있는 경우, 싱글 톤은 동일한 객체의 여러 인스턴스를 저장하지 않기 때문에 메모리를 덜 사용합니다. – MeetTitan
사람들은 활동 라이프 사이클을 이해하지 못하기 때문에 안드로이드는 변수를 확보하기 위해 "결정"합니다. 그렇지 않습니다. 그것은 가비지 컬렉터가 다른 것과 같습니다. 개체에 대한 하나 이상의 참조가있는 경우 해당 개체는 수집되지 않습니다. – Simon