Хорошо, поэтому я пытаюсь сохранить одноэлементный экземпляр GetItemQuery, который является POJO для хранения полей запросов и ответов, необходимых для вызовов Retrofit API. Мне не нужно создавать новый GetItemQuery каждый раз, когда я звоню, поэтому я использую одноэлементный шаблон для установки полей существующего экземпляра GetItemQuery.
public class GetItemQuery {
// request data
private String itemId;
private int numberToLoad;
// response data
private Item item;
private static class Loader {
static final GetItemQuery sInstance = new GetItemQuery();
}
public static GetItemQuery getInstance(Item item) {
GetItemQuery instance = Loader.sInstance;
instance.setItem(item);
return instance;
}
public Item getItem() {
if (item == null) {
item = new Item();
}
return item;
}
public void setItem(Item item) {
this.item = item;
}
// other getters and setters
}
в моем приложении для Android. В каких случаях мне следует беспокоиться о том, что getInstance() будет обработан сборщиком мусора, поэтому все поля будут очищены? Или есть способ вручную собрать мусор, чтобы убедиться, что некоторые поля неожиданно не станут нулевыми?
1.) Он никогда не будет сборщиком мусора, пока есть ссылка на объект. Статические ссылки - это ссылки. Другими словами: не будет сборщика мусора, пока ваше приложение не перестанет работать. 2.) При использовании синглтонов (решение, которое вы не должны принимать просто так), пожалуйста, используйте реализацию enum. Это лучший способ сделать синглтон на Java. Сравните здесь.
Возможный дубликат Когда сборщик мусора сотрет экземпляр объекта, использующего шаблон Singleton?




Как описано в этом ответе:
Когда сборщик мусора сотрет экземпляр объекта, использующего шаблон Singleton?
Сборщик мусора не будет, потому что есть статическая ссылка
Связанный вопрос является дубликатом этого. Вы, вероятно, должны были отметить это как таковое, просто вставив ссылку в качестве ответа.
Похоже, это дубликат этого вопроса: stackoverflow.com/questions/4127458/…