Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / static переменная / 10 сообщений из 10, страница 1 из 1
06.08.2018, 09:42
    #39683586
nikomp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
static переменная
в приложении использовал переменную 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
06.08.2018, 09:59
    #39683594
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
static переменная
nikompв newInstance надо передать currentApp как это сделать?
Что мешает в newInstance добавить нужный аргумент?

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


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

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

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

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

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

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

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



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


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