powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / static переменная
10 сообщений из 10, страница 1 из 1
static переменная
    #39683586
nikomp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в приложении использовал переменную static, но студия ругается, что это потенциальная утечка памяти, а приложение Leak Canary выдает сообщения, что утечка есть.

пробую переписать код для устранения утечки, возникли проблемы.

Есть Activity, в котором создается экземпляр класса:
Код: java
1.
      currentApp = new App(this, downloadManager);



переменная currentApp была объявлена как static

у класса App есть метод, в котором создается фрагмент:

Код: java
1.
2.
      TemplateFragment templateFragment = new TemplateFragment();
      templateFragment=templateFragment.newInstance(text, id);



в newInstance надо передать currentApp как это сделать?
...
Рейтинг: 0 / 0
static переменная
    #39683594
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikompв newInstance надо передать currentApp как это сделать?
Что мешает в newInstance добавить нужный аргумент?

Второй вариант: https://developer.android.com/reference/android/app/Fragment#setArguments(android.os.Bundle)
...
Рейтинг: 0 / 0
static переменная
    #39683595
nikomp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmannikompв newInstance надо передать currentApp как это сделать?
Что мешает в newInstance добавить нужный аргумент?


Как в классе App получить экземпляр класса App, созданного в Activity, чтоб передать его фрагменту?
...
Рейтинг: 0 / 0
static переменная
    #39683597
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikompКак в классе App получить экземпляр класса App
this ?
...
Рейтинг: 0 / 0
static переменная
    #39683600
nikomp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikomp,

Утечка заключается в том, что в статической переменной есть ссылка на Context.
Получается, что для того чтоб избавиться от утечки нужно убрать поле Context, но тогда надо в каждый метод где используется Context его явно передавать.
Нет других способов?
...
Рейтинг: 0 / 0
static переменная
    #39683601
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikompНет других способов?
Именно передавать при необходимости текущий контекст и есть правильный метод.

Либо дергать из Application.getApplicationContext, что не совсем или не всегда правильно.
...
Рейтинг: 0 / 0
static переменная
    #39683602
nikomp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

начал подробнее изучать проблему, натолкнулся на статью о синглетонах https://ru-code-android.livejournal.com/4594.html

теперь стою перед выбором либо сделать с использованием паттерна синглетон, либо убрать Context из полей класса и передавать его явно в каждый метод.

Что посоветуете?
...
Рейтинг: 0 / 0
static переменная
    #39683613
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikompЧто посоветуете?
В данном вопросе singleton я-бы использовал только в крайнем случае.
Если есть возможность (а она почти всегда есть), то передавать.
...
Рейтинг: 0 / 0
static переменная
    #39683615
nikomp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Да, судя по https://stackoverflow.com/questions/16626135/singleton-with-context-in-android при использовании синглетона встает такая же задача (передать контекст) и решают ее все - таки явной передачей параметра.
...
Рейтинг: 0 / 0
static переменная
    #39684098
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikomp
Код: java
1.
2.
 TemplateFragment templateFragment = new TemplateFragment();
      templateFragment=templateFragment.newInstance(text, id);



для передачи параметров во фрагмент есть аргументы.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / static переменная
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]