Синглтон с контекстом в Android
Я хочу создать одноэлементный класс, который будет вызываться из всех точек в моем приложении. Проблема этого класса нужен контекст для своих операций.
Я не хочу воссоздавать синглтон в каждом действии, потому что таким образом он теряет весь смысл, поэтому я подумал о создании его в моей MainActivity, с помощью метода init, где я передаю контекст в качестве аргумента. С этого момента мой Синглтон будет полезен, но я думаю, что это плохой дизайн, потому что способ моей ссылки на MainActivity всегда будет проводиться, и поэтому я могу столкнуться с утечками памяти.
Я здесь?
2 ответов
вы правы, чтобы не сохранять основной контекст активности в синглтон из-за утечек памяти. Если вам нужен постоянный контекст внутри вашего синглтона, используйте getApplicationContext (). Это можно безопасно сохранить. Обратите внимание, что этот контекст не используется для большинства функций, связанных с gui. В редких случаях вам нужен контекст уровня активности внутри singleton, передайте вызывающий контекст активности методу singleton без сохранения
попробовать WeakReference<Context>
:
private WeakReference<Context> context;
public static synchronized OsControler getInstance(Context context, int numero) {
if (mInstance == null) {
mInstance = new OsControler(context, numero);
}
return mInstance;
}
private OsControler(Context context, int numero) {
this.context = new WeakReference<>(context);
NUMERO = numero;
}