Подтвердить что ты не робот

Какая разница между статическим и нестационарным узлом просмотра в адаптере RecyclerView?

В чем преимущества этого подхода (использование статического вложенного класса в моем классе MyAdapter расширяет RecyclerView.Adapter):

static class MyVH extends RecyclerView.ViewHolder {...}

И этот подход (с использованием внутреннего класса участника):

  class MyVH extends RecyclerView.ViewHolder {...}

Или это не влияет на производительность, и оба подхода могут быть использованы?

4b9b3361

Ответ 1

Это скорее вопрос Java, чем вопрос Android. Рекомендуется использовать static для внутренних классов, чтобы избежать утечек памяти, если вы выберете их экземпляры из класса. Вы можете взглянуть на этот удивительный пост, который объясняет утечку памяти во внутренних классах.

В основном, что говорит nyx:

  • Если вы объявите зрителя как статический, вы можете его повторно использовать в других адаптерах. Во всяком случае, я не рекомендую это делать, создаю новый разделенный класс и использую его из нескольких мест, это имеет смысл. Один класс для одной цели.
  • В случае держателей просмотров эти классы будут использоваться только внутри адаптера, их экземпляры не должны переходить к фрагменту или активности или где-либо только по определению. Это означает, что он статический или нестатический, в случае держателей вида, тот же.

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

Ответ 2

Используя статическую информацию, вы просто можете использовать MyVh в других адаптерах. Если вы точно знаете, что вам нужен только MyVh в этом одном адаптере, вы должны сделать его нестатичным.

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

Не должно быть никаких последствий для производительности для статических и нестатических!

Ответ 3

Если вы хотите использовать один видоискатель во многих местах, то рекомендуется создать отдельные классы. В противном случае, если вы хотите использовать видоискатель только в одном месте, создайте нестатический вложенный видоискатель. Статический видоискатель не имеет никакого смысла

В большинстве мест я использую вложенный класс