Моя активність намагається створити AlertDialog, для якого потрібен контекст як параметр. Це працює, як очікувалося, якщо я використовую:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Однак я намагаюся використовувати "це" як контекст через потенціал витоку пам'яті, коли діяльність знищується та відтворюється навіть під час чогось простого, наприклад, обертання екрана. З пов’язаної публікації в блозі розробника Android :
Є два простих способи уникнути витоків пам'яті, що пов'язані з контекстом. Найбільш очевидний - уникати виходу з контексту поза його власним розмахом. Наведений вище приклад показав випадок статичного посилання, але внутрішні класи та їх неявне посилання на зовнішній клас можуть бути однаково небезпечними. Друге рішення - використовувати контекст програми. Цей контекст буде жити до тих пір, поки ваша програма жива і не залежить від життєвого циклу діяльності. Якщо ви плануєте зберігати довгоживучі об’єкти, яким потрібен контекст, запам’ятайте об’єкт програми. Ви можете легко отримати його, зателефонувавши Context.getApplicationContext () або Activity.getApplication ().
Але для " AlertDialog()
ні", getApplicationContext()
ні " getApplication()
є прийнятним як контекст, оскільки він кидає виняток:
"Неможливо додати вікно - нулевий маркер не для програми"
Отже, чи слід це насправді вважати «помилкою», оскільки нам офіційно рекомендується користуватися, Activity.getApplication()
але він не працює як рекламований?
Джим