Будет ли создание единого класса приложения причиной утечки памяти? - PullRequest
1 голос
/ 19 июня 2019

Я создал собственный класс Application для своего приложения. Этот класс onCreate устанавливает статическую переменную как этот

public void onCreate() {
  super.onCreate();
  mInstance = this;
}
public static ChattyApp getInstance() {
  return mInstance;
}

Затем я использую метод App.getInstance(), чтобы получить контекст приложения для класса неактивности / фрагмента, такого как API-контроллер или что-то еще. Может ли это вызвать утечку памяти?

Я установил утечку канарейки, и она показывает утечку памяти в переменной экземпляра класса Application. В этой переменной хранится ссылка на socket.io, поэтому я могу использовать его в любом месте приложения.

1 Ответ

1 голос
/ 19 июня 2019

Это хороший вопрос, который вы задали, и люди на SO много обсуждали это.Взгляните на this и this

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

В идеале для каждого логического блока у вас должен быть отдельный класс, чтобы иметь дело с ним, а не загрязнять ваш класс приложения.Ваш класс приложения может, однако, initialize или setup эти другие классы.Это создаст разделение интересов.

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

У Dagger 2 крутая кривая обучения, но он очень важный инструмент для обучения на Android-разработчике

...