Ответ
Нет, не все ссылки гарантируют, что объект не будет удален GC. В Android есть разные типы ссылок:
-
Strong Reference - обычная ссылка (
Object obj = new Object()). Гарантирует, что объект не будет собран, пока ссылка существует. -
WeakReference - слабая ссылка, не препятствует сборке мусора:
WeakReference<Object> weakRef = new WeakReference<>(new Object());
-
SoftReference - мягкая ссылка, объект будет собран только при нехватке памяти.
-
PhantomReference - фантомная ссылка, используется для финализации.
Пример утечки:
// Утечка памяти - статическое поле держит strong reference
static Object leakingObject = new Object();
Для управления жизненным циклом в Android рекомендуется использовать WeakReference для обработчиков, слушателей и контекстов.