2015-07-08 10 views
37

Quali sono i vantaggi di questo approccio (usando classe innestata statica nella mia classe MyAdapter estende RecyclerView.Adapter):Quale differenza tra viewholder statici e non statici in RecyclerView Adapter?

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

E questo approccio (utilizzando la classe membro interno):

class MyVH extends RecyclerView.ViewHolder {...} 

O non influisce sulle prestazioni e potrebbero essere utilizzati entrambi gli approcci?

risposta

68

È più una domanda Java che una domanda Android. Si consiglia di utilizzare la staticità per le classi interne per evitare perdite di memoria se si prendono le proprie istanze fuori dalla classe. Puoi dare un'occhiata al post impressionante this che spiega le perdite di memoria sulle classi interne.

Fondamentalmente ciò che Nyx dice:

  • Se si dichiara la viewholder come statica è possibile riutilizzarlo in altri adattatori. Ad ogni modo, non consiglio di farlo, creare una nuova classe separata e usarla da più posti, ha più senso. Una lezione per uno scopo.
  • Nel caso di proprietari di view, queste classi saranno utilizzate solo all'interno dell'adattatore, le loro istanze non dovrebbero andare al frammento o all'attività o altrove solo per definizione. Ciò significa che averlo statico o non statico, nel caso dei possessori di una vista, è lo stesso.

Rispondendo alla domanda sul rendimento, è possibile dare un'occhiata alla risposta this. Quello statico richiederà meno memoria dell'altro, ma di nuovo, stiamo parlando di riciclatori che ricicleranno le istanze, quindi l'impatto della memoria non è un problema.

+2

Risposta stupenda! –

+0

grazie per la spiegazione –

+0

spiegazione perfetta – user2695433

6

L'utilizzo di statico significa semplicemente che è possibile riutilizzare lo MyVh in altri adattatori. Se sai per certo che avrai solo bisogno di MyVh in quell'unico adattatore, dovresti renderlo non statico.

Se ne avrete bisogno in altri adattatori, potrebbe essere addirittura meglio crearlo solo come classe separata, piuttosto che come classe nidificata.

Non ci dovrebbero essere effetti sulle prestazioni per statico o non statico!

+0

spiegazione semplice ed efficace del caso d'uso più necessario – user2695433