2015-07-08 1 views
37

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

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

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

class MyVH extends RecyclerView.ViewHolder {...} 

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

ответ

68

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

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

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

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

+2

Удивительный ответ! –

+0

объяснение –

+0

отличное объяснение – user2695433

6

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

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

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

+0

Простое и эффективное объяснение наиболее необходимого варианта использования – user2695433