Вы правильно определили проблему, когда сказали «... для AlertDialog () ни getApplicationContext (), ни getApplication () не могут быть использованы в качестве контекста, так как они выдают исключение:« Невозможно добавить window - token nullне для приложения ""
. Чтобы создать диалог, вам нужен контекст активности или контекст службы , а не контекст приложения (оба getApplicationContext () и getApplication () возвращают контекст приложения).
Вот как вы получаете Контекст действия :
(1) В действии или услуге:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
(2) Во фрагменте: AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
Утечки памяти не являются проблемой, свойственной ссылке «это», котораяссылка объекта на себя (т. е. ссылка на фактическую выделенную память для хранения данных объекта).Это происходит с любой выделенной памятью, для которой сборщик мусора (GC) не может освободиться после того, как выделенная память пережила свой полезный срок службы.
Большую часть времени, когда переменная выходитвне области памяти будет восстановлено GC.Однако утечки памяти могут возникать, когда ссылка на объект, содержащийся в переменной, скажем «x», сохраняется даже после того, как объект пережил свой полезный срок службы.Таким образом, выделенная память будет потеряна до тех пор, пока «x» будет содержать ссылку на нее, поскольку GC не будет освобождать память до тех пор, пока на эту память все еще ссылаются.Иногда утечки памяти не очевидны из-за цепочки ссылок на выделенную память.В таком случае ГХ не освободит память до тех пор, пока не будут удалены все ссылки на эту память.
Чтобы предотвратить утечки памяти, проверьте свой код на наличие логических ошибок, которые приводят к тому, что на выделенную память будет ссылаться бесконечно "это "(или другие ссылки).Не забудьте также проверить ссылки на цепочки.Вот некоторые инструменты, которые вы можете использовать, чтобы помочь вам проанализировать использование памяти и обнаружить эти неприятные утечки памяти: