2015-01-31 1 views
1

Я думаю об использовании одноэлементных моделей для адаптеров и помощников в приложении для Android, которое я создаю, но я не слишком хорошо знаком с сбором мусора Java и как статические атрибуты (например, static FooBar instance) влияют на использование памяти.Как использовать одноэлементные паттерны в использовании памяти Android?

Будет ли это иметь большое влияние в приложениях Android, и я должен избегать его использования?

+0

Это зависит от вашего кода. Если вы могли бы иметь несколько экземпляров, которые делают то же самое, одноэлемент будет использовать меньше памяти, потому что он не хранит несколько экземпляров одного и того же объекта. – MeetTitan

+1

Существует миф, изобретенный, потому что люди не понимают жизненный цикл активности, что Android как-то «решает» высвободить переменные. Это не. Это сборщик мусора, как и любой другой. если у вас есть одна или несколько ссылок на объект, он не будет собран. – Simon

ответ

4

Зависит от того, что вы подразумеваете под воздействием «использования памяти удара». Объект не больше или меньше только потому, что есть один экземпляр, который применяется в одноэлементном шаблоне. В этом смысле нет никакой разницы.

Если это означает, что у вас определенно есть не более одной копии объекта в памяти вместо нескольких, да, это может помочь.

Обычно, что люди означают, есть, сколько времени живет синглтон? он придерживается того, что занимает память, когда приложение находится в фоновом режиме?

A static член прилагается к экземпляру его Class, который, в свою очередь, прикреплен к его ClassLoader. Таким образом, синглтон живет до тех пор, пока ClassLoader. Оказывается, в Android, что приложение ClassLoader уходит в onDestroy, а не , поэтому один синглтон подразумевает, что вы держитесь за память, даже когда приложение находится в фоновом режиме.

3

Как говорили другие, это зависит. Случай, когда это может быть плохо, заключается в том, что синглтон держит ссылки на объекты, которые в противном случае могли бы быть собраны мусором. Если в объекте есть много ссылок или ссылки на большие объекты, вы можете использовать память, которая вам не нужна. Вы могли бы обойти это, используя слабые ссылки, но тогда вам нужно иметь код для воссоздания объектов, когда это необходимо, если они собирают мусор. Вы не могли бы использовать одноэлементный шаблон, который позволял бы вещам собирать мусор (по крайней мере потенциально), но за счет создания и выброса объектов. Лучшее решение зависит от деталей объекта и его использования. Одна вещь, которую всегда следует избегать, заключается в ссылке на объект пользовательского интерфейса, такой как вид.

Смежные вопросы