У меня есть одноэлементный класс Toast-показ, который отслеживает текущие тосты и отменяет его, когда он снова начал:Статический контекст, сохраненный в классе приложений и используемый в одноточечном тосте, создает ли утечку памяти?
public enum SingleToast {
INSTANCE;
private Toast currentToast;
private String currentMessage;
public void show(String message, int duration) {
if (message.equals(currentMessage)) {
currentToast.cancel();
}
currentToast = Toast.makeText(App.getContext(), message, duration);
currentToast.show();
currentMessage = message;
}
}
(Расширенное объяснения этого примера можно найти здесь: toast issue in android)
Основное отличие между ответом в ссылке и этой части кода - это контекст, который не передается как параметр. Я получаю его, используя статический контекст, сохраненный в классе App, который сохраняется при запуске приложения:
public class App extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
}
Я прочитал об этом простом контексте решения в нескольких блогах, и это очень много помог в retreiving контекст в классах, для которых передающий контекст как параметры просто раздражает или даже невозможно.
Однако, интересно, создаю ли я утечку памяти!
Прежде всего: это статический контекст сам по себе вызывает утечку памяти (если да, то как я могу предотвратить это без необходимости проходить контекст всегда везде?)
Во-вторых: это проблема использовать контекст в объекте тоста и сохранить его как поле внутри одного элемента, даже если сам контекст не будет статическим?