рд╡реАрдХреЗ рд╕рдВрджреЗрд╢ рд╕реНрдХреНрд░реАрди рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ?

рд╡реАрдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рд▓реИрдЧреНрд╕ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдмрд╣реБрдд рдмрдбрд╝реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ UiThread рдХреЛ рди рдорд╛рд░реЗрдВ? RecyclerView рдореЗрдВ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рджреЗрд░реА рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд░реЗрдВ?



рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рд╡реАрдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд╕реНрдХреНрд░реАрди рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рдХрд╛рдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпреВрдЖрдИ рдкрд░ рдиреНрдпреВрдирддрдо рдмреНрд░реЗрдХ рдХреЗ рд╕рд╛рде рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдореИрдВ рд▓рдЧрднрдЧ рджрд╕ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдкрд╣рд▓реЗ PHP / Node.js. рдХреЗ рд▓рд┐рдП рдлреНрд░реАрд▓рд╛рдиреНрд╕ рдерд╛ рдЕрдм - рдПрдХ рд╡рд░рд┐рд╖реНрда Android рдбреЗрд╡рд▓рдкрд░ VKontakteред

рдореЛрдмрд┐рдпрд╕ 2019 рдорд╛рд╕реНрдХреЛ рд╕рдореНрдореЗрд▓рди рд╕реЗ рдореЗрд░реА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдХрдЯ - рд╡реАрдбрд┐рдпреЛ рдФрд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рддрд╣рддред


рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рддреАрди рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ



рдЖрд╡рд░рдг рдкрд░ рджреЗрдЦреЗрдВ:


рдпрд╣ рд╕рдВрджреЗрд╢ рдХрд╣реАрдВ рдкрд╛рдВрдЪ рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реИред рдФрд░ рд╡реЗ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╢реАрд░реНрд╖ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░, рд╕рдм рдХреБрдЫ рдкрд┐рдЫрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдЦреИрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреВрдЖрдИ рдЦреБрдж рдХрд╛рдлреА рд╡рд┐рд╡рд┐рдз рд╣реИ:

  • рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдВрдХреЗрддрдХ,
  • рд╕реЗрд╡рд╛ рд╕рдВрджреЗрд╢
  • рдкрд╛рда (рдЗрдореЛрдЬреА, рд▓рд┐рдВрдХ, рдИрдореЗрд▓, рд╣реИрд╢рдЯреИрдЧ),
  • рдмреЙрдЯ рдХреАрдмреЛрд░реНрдб
  • ~ 40 рддрд░реАрдХреЗ рд╕рдВрд▓рдЧреНрдирдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
  • рдЕрдЧреНрд░реЗрд╖рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдкреЗрдбрд╝ред

рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рд▓реИрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЫреЛрдЯрд╛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП? рджреЛрдиреЛрдВ рд╕рд░рд▓ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдФрд░ рдмрд▓реНрдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ (рдКрдкрд░ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдХрд┐рдирд╛рд░реЗ-рдХреЗрд╕)ред


рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди


RecyclerView рдФрд░ рдЗрд╕рдХреЗ рдРрдб-рдСрди


RecyclerView рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдРрдб-рдСрди рд╣реИрдВред

  • setHasFixedize ( boolean)

рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдзреНрд╡рдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рд╕реВрдЪреА рдЖрдЗрдЯрдо рд╕рдорд╛рди рдЖрдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡рд┐рдкрд░реАрдд рд╕рдЪ рд╣реИред рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм RecyclerView рдХрд╛ рдЖрдХрд╛рд░ рддрддреНрд╡реЛрдВ рдХрд╛ рд╕реНрдерд┐рд░ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддрд╛ рд╣реИ (рдореЛрдЯреЗ рддреМрд░ рдкрд░, wra_content рдирд╣реАрдВ)ред рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ RecyclerView рдХреА рдЧрддрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рд╕реЗ рдмрдЪрд╛ рд░рд╣реЗред

  • setNestedScrollingEnabled ( boolean)

рдорд╛рдЗрдирд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЬреЛ NestedScroll рд╕рдорд░реНрдерди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ NestedScroll рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ CollapsingToolbar рдпрд╛ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • setItemViewCacheSize ( cache_size)

рдЖрдВрддрд░рд┐рдХ RecyclerView рдХреИрд╢ рдХреА рд╕реНрдерд╛рдкрдирд╛ред

рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ RecyclerView рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рд╣реИрдВ:

  • рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ ViewHolder рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ;
  • рдПрдХ RecycledViewPool рднрдВрдбрд╛рд░рдг ViewHolder рд╣реИ;
  • ViewHolder тАФ RecycledViewPool.

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рджреЛ рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдХреИрд╢ рд╣реИред рдЗрд╕реЗ ItemViewCache рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдХреНрдпрд╛ рд╣реИ? рдЬрдм ViewHolder рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ RecycledViewPool рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдордзреНрдпрд╡рд░реНрддреА рдХреИрд╢ (ItemViewCache) рдореЗрдВред рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ ViewHolder рдФрд░ ItemViewCache рдХреЗ рдЕрдВрджрд░ ViewHolder рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ RecycledViewPool рдХреЗ рдЕрдВрджрд░ ViewHolder рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

SetItemViewCacheSize рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдЗрд╕ рдордзреНрдпрд╡рд░реНрддреА рдХреИрд╢ рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рд╕реНрдХреНрд░реЙрд▓ рдЙрддрдиреА рд╣реА рдХрдо рджреВрд░реА рдкрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдкрдбреЗрдЯ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛ (ViewHolder.onBind, рдЖрджрд┐ рдХреЗ рдХрд╛рд░рдг)ред

RecyclerView рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдХреИрд╢ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рд╣реИред рдЖрдк рдПрдХ рдорд╣рд╛рди рд▓реЗрдЦ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рд╣рд░ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдЕрдиреБрдХреВрд▓рди OnCreate / OnBind


рдПрдХ рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╛рдзрд╛рди onCreateViewHolder / onBindViewHolder рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реИ:

  • рдЖрд╕рд╛рди рд▓реЗрдЖрдЙрдЯ (рд╣рдо рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдпрд╛ рдХрд╕реНрдЯрдо рд╡реНрдпреВрдЧреНрд░реБрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ),
  • рднрд╛рд░реА рд╕рдВрдЪрд╛рд▓рди (рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд▓рд┐рдВрдХ / рдЗрдореЛрдЬреА) рд╕рдВрджреЗрд╢ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдЪрд░рдг рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ,
  • StringBuilder рдирд╛рдо, рддрд┐рдерд┐, рдЖрджрд┐ рдХреЗ рдкреНрд░рд╛рд░реВрдкрдг рдХреЗ рд▓рд┐рдП
  • рдФрд░ рдЕрдиреНрдп рдЙрдкрд╛рдп рдЬреЛ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдп рд╕рдордп рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред

рдЯреНрд░реИрдХрд┐рдВрдЧ рдПрдбреЙрдкреНрдЯрд░ .onFailedToRecyclerView ()




рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рддрддреНрд╡ (рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ) рдЕрд▓реНрдлрд╛ рдХреЗ рд╕рд╛рде рдПрдирд┐рдореЗрдЯреЗрдб рд╣реИрдВред рдлрд┐рд▓рд╣рд╛рд▓, рдЬрдм рджреГрд╢реНрдп, рдПрдиреАрдореЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ RecycledViewPool рдкрд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВ? RecycledViewPool рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ View рдЕрдм View.hasTransientState рдзреНрд╡рдЬ рджреНрд╡рд╛рд░рд╛ рдПрдирд┐рдореЗрдЯреЗрдб рд╣реИ, рдФрд░ рдмрд╕ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪрд┐рддреНрд░ RecycledViewPool рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рдмрд╕реЗ рд╕рд╣реА рдирд┐рд░реНрдгрдп рд╣реИ рдЬрдм ViewHolder рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рднреА рдПрдирд┐рдореЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдпрджрд┐ рдЖрдкрдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдПрдХ рд╣реЙрдЯрдлрд╝рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдПрдХ рдЖрд▓рд╕реА рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рддреЛ onFailedToRecycle рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрдк рдмрд╕ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреВрдВрдЧрд╛ред



рдЯреНрд░реИрдХрд┐рдВрдЧ рдУрд╡рд░рд░рд┐рдЯ рдФрд░ рдкреНрд░реЙрдЗрд▓рд░


рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рддрд░реАрдХрд╛ рдУрд╡рд░рдбреНрд░рд╛рдЗрд╡ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╣реИред

рдирд┐рдХрд╛рд╕реА - рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рд┐рдбреНрд░рд╛ рдХреА рд╕рдВрдЦреНрдпрд╛: рдХрдо рдкрд░рддреЗрдВ рдФрд░ рдХрдо рд░рд┐рдбреНрд░рд╛ рдкрд┐рдХреНрд╕реЗрд▓, рддреЗрдЬред рд▓реЗрдХрд┐рди рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдзреБрдирд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдореЗрдВ, рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЗрддрдирд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ - рдЙрд░реНрдл тАЛтАЛрдПрдВрдбреНрд░реЙрдЗрдб рдореЙрдирд┐рдЯрд░, рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╣реИред рдЗрд╕рдореЗрдВ, рдЖрдк рд╕рднреА рддрдерд╛рдХрдерд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢ рдЦреЛрд▓реЗрдВ, рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрд╛ред



рд╕рднреА рдЬреЛ рдмрд╛рдПрдВ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╣реИрдВ, рд╡реЗ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡реНрдпреВ / рд╡реНрдпреВрд╣реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ / рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдпрд╛ рд╣рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕рд╣реА рдЖрдзрд╛ рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╣реИ рдЬреЛ ViewHolder рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред

рдирдВрдмрд░ 1 рдкрд░ рдХреЙрд▓ рдмреНрд▓реЙрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реИ: рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╡реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рдЧрдП рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдереНрд░реЗрдб рдкрд░ рд░рдЦрдирд╛ рднреВрд▓ рдЧрдП, рдЬрд┐рд╕рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ 20% рддрдХ рдзреАрдорд╛ рд╣реЛ рдЧрдпрд╛ред

рдирдВрдмрд░ 2 рдкрд░ рдХреЙрд▓ рдмреНрд▓реЙрдХ - рдлреНрд░реЗрд╕реНрдХреЛ, рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпред рдпрд╣ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрднреА рддрдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдФрд░ ~ 15% рдмрдЪрд╛рдПрдВрдЧреЗред

рдпрд╣реА рд╣реИ, рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо ~ 35% рдХреА рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

Diffiff


рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рдЕрдкрдиреЗ рдорд╛рдирдХ рд░реВрдк рдореЗрдВ рдбрд┐рдлреБрдЯрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рджреЛ рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реИрдВ - рдЬрд┐рдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдкрд░ рдпрд╣ рд╕рдм рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдорд╣рдВрдЧрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реВрдЪреА рдмрд╣реБрдд рдмрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдбрд┐рдлреБрдЯрд┐рд▓ рдХреА рдЧрдгрдирд╛ рдПрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдереНрд░реЗрдб рдкрд░ рдЪрд▓рддреА рд╣реИред

ListAdapter рдФрд░ AsyncListDiffer рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред ListAdapter рд╕рд╛рдорд╛рдиреНрдп рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ - рдмрд╕ рдПрдХ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдкреВрд░реА рдЧрдгрдирд╛ рдЖрдВрддрд░рд┐рдХ рдкреГрд╖реНрдарднреВрдорд┐ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдЙрдбрд╝ рдЬрд╛рддреА рд╣реИред ListAdapter рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рддреАрди рдмрд╛рд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд▓реЗрдЧрд╛ред

рдбрд┐рдлреНрдпреВрдЯрд┐рд▓ рд╕реНрд╡рдпрдВ рд╣рдо рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рд╕рдВрджреЗрд╢ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рдЗрд╕рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд╡рд┐рд▓реЛрдкрдиред рдХреБрдЫ рддреНрд╡рд░рд┐рдд-рдкрд░рд┐рд╡рд░реНрддрди рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд╣рдо рдХреЛрдИ рдлреЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдСрдбрд┐рдпреЛ рдЦреЗрд▓рддреЗ рд╣реИрдВред рдРрд╕реА рдШрдЯрдирд╛рдПрдВ рдЕрдХреНрд╕рд░ рд╣реЛрддреА рд╣реИрдВ - рдХрдИ рдмрд╛рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб, рдФрд░ рдпрджрд┐ рдЖрдк рд╣рд░ рдмрд╛рд░ рдбрд┐рдлреНрдпреВрдЯрд▓ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдорд┐рд▓реЗрдВрдЧреЗред

рдПрдирд┐рдореЗрд╢рди


рдПрдХ рдмрд╛рд░ рдПрдХ рдПрдиреАрдореЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдерд╛ - рдмрд▓реНрдХрд┐ рдЕрд▓реНрдк, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХреБрдЫред рд╣рдордиреЗ рдЙрдирдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛:

view.startAnimation(TranslateAnimation(fromX = 0, toX = 300))

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ getTranslationX () рдкреИрд░рд╛рдореАрдЯрд░ рдПрдиреАрдореЗрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕рдорд╛рди рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдиреАрдореЗрд╢рди рдиреЗ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рднреМрддрд┐рдХ рдЧреБрдгреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рд╛ред



рдПрдВрдбреНрд░реЙрдЗрдб 3.0 рдореЗрдВ, рдПрдирд┐рдореЗрдЯрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬреЛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рднреМрддрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред



рдмрд╛рдж рдореЗрдВ, ViewPropertyAnimator рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдФрд░ рд╣рд░ рдХреЛрдИ рдЕрднреА рднреА рдПрдирд┐рдореЗрдЯрд░ рд╕реЗ рдЗрд╕рдХреЗ рдЕрдВрддрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред

рдореЗрдВ рд╕рдордЭрд╛ рджреВрдВрдЧрд╛ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рдХреЛ рддрд┐рд░рдЫреЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рджреГрд╢реНрдп рдХреЛ x, y axes рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ:

val animX = ObjectAnimator.ofFloat(view, тАЬtranslationXтАЭ, 100f)
val animY = ObjectAnimator.ofFloat(view, тАЬtranslationYтАЭ, 200f)
AnimatorSet().apply {
    playTogether(animX, animY)
    start()
}

рдФрд░ рдЖрдк рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

view.animate().translationX(100f).translationY(200f) 

рдЬрдм рдЖрдк view.animate () рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ViewPropertyAnimator рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

  1. рдХреЛрдб рдкрдврд╝рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиред
  2. рдмреИрдЪ рд╕рдВрдЪрд╛рд▓рди рдПрдиреАрдореЗрд╢рдиред

рд╣рдорд╛рд░реЗ рдЕрдВрддрд┐рдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рджреЛ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдЬрдм рд╣рдо рдПрдирд┐рдореЗрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдПрдиреАрдореЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдПрдиреАрдореЗрд╢рди рдЯрд┐рдХ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣реА рд╣реИ, setTranslationX рдФрд░ setTranslationY рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ View рдЕрд▓рдЧ рд╕реЗ рдЕрдкрдбреЗрдЯ рдСрдкрд░реЗрд╢рди рдХрд░реЗрдЧрд╛ред

ViewPropertyAnimator рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдо рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд╛рд░рдг рдмрдЪрдд рд╣реЛрддреА рд╣реИ рдФрд░ рдЧреБрдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд╡рдпрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред

рдЖрдк рдПрдиреАрдореЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ViewPropertyAnimator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдирд┐рдореЗрд╢рди рдпрдерд╛рд╕рдВрднрд╡ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрдВрдЧреЗред рдХреНрдпреЛрдВ? Android рдореЗрдВ рдПрдХ RenderNode (DisplayList) рд╣реИред рдмрд╣реБрдд рдореЛрдЯреЗ рддреМрд░ рдкрд░, рд╡реЗ onDraw рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред ViewPropertyAnimator RenderNode рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкрд░ рдПрдирд┐рдореЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдСрдирдбреНрд░реЙрд▓ рдХреЙрд▓ рд╕реЗ рдмрдЪрддрд╛ рд╣реИред

рдХрдИ рджреГрд╢реНрдп рдЧреБрдг рд╕реАрдзреЗ рд░реЗрдВрдбрд░рдиреЛрдб рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдирд╣реАрдВред рдпрд╣реА рд╣реИ, ViewPropertyAnimator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдЪрд╛рдирдХ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдиреАрдореЗрд╢рди рд╣реИ рдЬреЛ ViewPropertyAnimator рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдирд┐рдореЗрд╢рди: рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рдирдореИрдирдЧрд░


рдЖрдорддреМрд░ рдкрд░, рд▓реЛрдЧ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рджреВрд╕рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдПрдиреАрдореЗрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдХреНрд░реАрди рд╣реИ рдЬрд┐рд╕ рдкрд░ рдПрдХ рд╡реЙрдЗрд╕ рдореИрд╕реЗрдЬ рдЪрд▓рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдПрдХ рдХреНрд░реЙрд╕ рдХреЗ рд╕рд╛рде рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдорд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдПрдиреАрдореЗрд╢рди рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ: рдЦрд┐рд▓рд╛рдбрд╝реА рдЕрд▓реНрдлрд╛ рдХреЗ рд╕рд╛рде рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреБрд╡рд╛рдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдКрдВрдЪрд╛рдИ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░реА рд╕реВрдЪреА рдКрдкрд░ рдЬрд╛рддреА рд╣реИ рдФрд░ рдКрдВрдЪрд╛рдИ рднреА рдмрджрд▓рддреА рд╣реИред



рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реВрдЪреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рддреЛ рдПрдиреАрдореЗрд╢рди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реВрдЪреА рдХрд╛ рдПрдХ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рджреГрд╢реНрдп рд╣реИред

рд╢рд╛рдпрдж рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдПрдирд┐рдореЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рдлрд┐рд░ рд╣рдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ, рдХреНрд░реИрд╢ рдХрд░реЗрдВрдЧреЗ, рдмреИрд╕рд╛рдЦреА рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреЛрдб рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдиреАрдЪреЗ рд╕реНрдХреНрд░реАрди рдХреА рддрд░рд╣ рдХреБрдЫ рдорд┐рд▓реЗрдЧрд╛ред



TransitionManager рдХреЗ рд╕рд╛рде, рдЖрдк рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

TransitionManager.beginDelayedTransition(
        viewGroup = <LinearLayoutManager>,
        transition = AutoTransition())
playerView.visibility = View.GONE

рд╕рднреА рдПрдиреАрдореЗрд╢рди рд╣реВрдб рдХреЗ рддрд╣рдд рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рджреВ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЕрдВрджрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдиреНрд╕рдореИрдирдореИрди рдмрд╕ рд╕рднреА рджреЗрдЦреЗрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХ рдПрдирд┐рдореЗрдЯрд░реНрд╕ рдпрд╛ рд╡реНрдпреВрдкреНрд░реЙрдкрд░реЗрдЯреАрдореИрдЯрд┐рдореЗрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдФрд░ рдпрдерд╛рд╕рдВрднрд╡ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред TransitionManager рд╣рдореЗрдВ рд╕рдВрджреЗрд╢ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдирд┐рдореЗрд╢рди рдХреЛ рддреНрд╡рд░рд┐рдд рдФрд░ рдЖрд╕рд╛рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдХрд╕реНрдЯрдо рд╕рдорд╛рдзрд╛рди




рдпрд╣ рд╕рдмрд╕реЗ рдореМрд▓рд┐рдХ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЬрдм рдЖрдкрдХрд╛ рд╕рдВрджреЗрд╢ 10 рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реЛ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ? рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рддрддреНрд╡ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдареАрдХ рдиреАрдЪреЗ рд╕реНрдерд┐рдд рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ ViewHolder рдПрдХ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рджрд░реНрдЬрдиреЛрдВ рд╡рд┐рднрд┐рдиреНрди ViewHolders рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ 10 рд╕реНрдХреНрд░реАрди рдмрди рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╣рдо рдХреЗрд╡рд▓ рдЫрд╣ рд╡реНрдпреВрд╣реЛрд▓рд░реНрд╕ рдХреЛ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рдЖрд╕рд╛рди рд▓реЗрдЖрдЙрдЯ рдорд┐рд▓рд╛, рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдПрдХ рдХреЗ - рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ?



рд╕рд░рд▓ ViewHolders рд╣реИрдВ - рдпреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдбреЗрдЯ рд╕реЗрдкрд░реЗрдЯрд░ рд╣реИрдВ, рд▓реЛрдб рдЕрдзрд┐рдХ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдФрд░ BaseViewHolder - рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдмреБрдирд┐рдпрд╛рджреА ViewHolderред рдЗрд╕рдХрд╛ рдПрдХ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдХрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ - TextViewHolder, PhotoViewHolder, AudioViewHolder, ReplyViewHolder рдФрд░ рдЗрддрдиреЗ рдкрд░ред рдЗрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ 70 рд╣реИрдВред

BaseViewHolder рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ?


BaseViewHolder рдХреЗрд╡рд▓ рдЕрд╡рддрд╛рд░ рдФрд░ рдмреБрд▓рдмреБрд▓реЗ рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд╕рд╛рде рд╣реА рдЕрдЧреНрд░реЗрд╖рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд░реЗрдЦрд╛ - рдмрд╛рдИрдВ рдУрд░ рдиреАрд▓рд╛ рд╣реИред



рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп рдмреЗрд╕ рд╡реНрдпреВрд╣реЗрдпрд░ рд╡рд╛рд░рд┐рд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: TextViewHolder рдХреЗрд╡рд▓ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, FwdSenderViewHolder - рдЕрдЧреНрд░реЗрд╖рд┐рдд рд╕рдВрджреЗрд╢ рдХреЗ рд▓реЗрдЦрдХ, AudioMsgViewHolder - рдЖрд╡рд╛рдЬ рд╕рдВрджреЗрд╢, рдФрд░ рдЗрд╕реА рддрд░рд╣ред



рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЛред рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдЪреМрдбрд╝рд╛рдИ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдзрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рдЖрдзрд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ (рдФрд░ рдЕрднреА рддрдХ рднреА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдмрд┐рд▓реНрдХреБрд▓ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдорд╛рдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░рдирд╛ рд╣реИ, рдЕрдлрд╕реЛрд╕ред рдЬрдм рд╕рдВрджреЗрд╢ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ: рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдкрд╛рда рдпрд╛ рдЖрд╡рд╛рдЬ - рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рдЖрдЗрдЯрдо рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред



рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреНрд▓рд╛рд╕рд┐рдХ wra_content рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХрдИ рдЯреБрдХрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ ViewHolder рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪреМрдбрд╝рд╛рдИ рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдзреНрдп рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ - 220 рдбреАрдкреАред



рдпрджрд┐ рдкрд╛рда рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рджрд╛рдИрдВ рдУрд░ рдПрдХ рдЦрд╛рд▓реА рдЬрдЧрд╣ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдмрдЪрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХрдИ рд╕рд╛рд▓реЛрдВ рддрдХ, рдХреЛрдИ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдереА - рд╢рд╛рдпрдж рдХрд┐рд╕реА рдиреЗ рдЧреМрд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рднреА рдХреЛ рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЧрдИред



рдзрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдПрдХ рд╕реНрдЯрд┐рдХрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪреМрдбрд╝рд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рджрд┐рдЦреЗред

рд╣рдо рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЪрд░рдг рдореЗрдВ рд╡реНрдпреВрд╣реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ: рд╣рдо рд╕рдВрджреЗрд╢ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рд▓реЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЖрдЗрдЯрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╕реАрдзреЗ рд╡реНрдпреВрд╣реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред



рд╡реИрд╢реНрд╡рд┐рдХ рдкреБрдирд░реНрдирд╡реАрдиреАрдХрд░рдг рджреГрд╢реНрдп


рд╣рдорд╛рд░реЗ рдореИрд╕реЗрдВрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдореИрдХреЗрдирд┐рдХреНрд╕ рдРрд╕реЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рдПрдХ рд╣реА рдЪреИрдЯ рдореЗрдВ рдирд╣реАрдВ рдмреИрдарддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдЙрдирдХреЗ рдмреАрдЪ рдЬрд╛рддреЗ рд╣реИрдВред рдорд╛рдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рдЬрдм рд╣рдо рдЪреИрдЯ рдореЗрдВ рдЧрдП рдФрд░ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рддреЛ RecycledViewPool (рдФрд░ рдЗрд╕рдореЗрдВ ViewHolder) рдмрд╕ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рд╡реНрдпреВрд╣реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдкреБрдирд░реНрдирд╡реАрдиреАрдХрд░рдг рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, RecycledViewPool рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ;
  • рд╕рдВрджреЗрд╢ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдЪрд▓рддрд╛ рд╣реИ;
  • RecyclerView.setRecycledViewPool (рдкреВрд▓) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред

рдиреБрдХрд╕рд╛рди рд╣реИрдВ, рджреЛ рдмрд╛рддреЗрдВ рдпрд╛рдж рд░рдЦрдирд╛ рдЬрд░реВрд░реА рд╣реИ:

  • рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд╛рдкрд╕ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬреЛ ViewHolders рд╕реНрдХреНрд░реАрди рдкрд░ рдереЗ, рдЙрдиреНрд╣реЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдкреВрд▓ рдореЗрдВ рдирд╣реАрдВ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
    LinearLayoutManager.recycleChildrenOnDetach = true
  • RecycledViewPool рдХреА рд╕реАрдорд╛рдПрдБ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ ViewType рдХреЗ рд▓рд┐рдП рдкрд╛рдВрдЪ рд╕реЗ рдЕрдзрд┐рдХ ViewHolders рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ 9 TextView рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдкрд╛рдВрдЪ рдЖрдЗрдЯрдо RecycledViewPool рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдмрд╛рдХреА рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк RecycledViewPool рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
RecycledViewPool.setMaxRecycledViews (viewType, size)

рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ ViewType рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрдЦреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдиреЗ RecycledViewPool рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдорд╛рдирдХ рдПрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ NoLimit рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЖрдк рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдбрд┐рдлреНрдпреВрдЯрд┐рд▓ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ


рдпрд╣рд╛рдВ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдорд╛рдорд▓рд╛ рд╣реИ - рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдПрдХ рдСрдбрд┐рдпреЛ рдЯреНрд░реИрдХ рдФрд░ рд╡реЙрдЗрд╕ рд╕рдВрджреЗрд╢ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбрд┐рдлреНрдпреВрдЯрд┐рд▓ рд╕реНрдкреИрдо рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред



рд╣рдорд╛рд░реЗ BaseViewHolder рдореЗрдВ рдПрдХ рдЕрдореВрд░реНрдд рдЕрдкрдбреЗрдЯрдЕрдкрд▓реЛрдбрдкреНрд░реЛрдЧреНрд░реЗрд╕ рд╡рд┐рдзрд┐ рд╣реИред

abstract class BaseViewHolder : ViewHolder {
    тАж
    fun updateUploadProgress(attachId: Int, progress: Float)
    тАж        
}

рдПрдХ рдШрдЯрдирд╛ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рднреА рджреГрд╢реНрдп рд╡реНрдпреВрд╣ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

fun onUploadProgress(attachId: Int, progress: Float) {
    forEachActiveViewHolder {
        it.updateUploadProgress(attachId, progress)
    }
}

рдпрд╣ рдПрдХ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рд╣реИ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд╕ рд╕реЗ рдЕрдзрд┐рдХ ViewHolder рд╣реЛрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдкрд┐рдЫрдбрд╝ рдирд╣реАрдВ рд╕рдХрддрд╛ред рджреГрд╢реНрдпрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдХреИрд╕реЗ рджреЗрдЦреЗрдВ? рдПрдХ рдЕрдиреБрднрд╡рд╣реАрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

val firstVisiblePosition = <...>
val lastVisiblePosition = <...>
for (i in firstVisiblePosition.. lastVisiblePosition) {
    val viewHolder = recycler.View.findViewHolderForAdapterPosition(i)
    viewHolder.updateUploadProgress(..)
}

рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдордзреНрдпрд╡рд░реНрддреА рдХреИрд╢ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛, ItemViewCache, рдореЗрдВ рд╕рдХреНрд░рд┐рдп ViewHolders рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдмрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЙрдиреНрд╣реЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╕реАрдзреЗ рддреМрд░ рдкрд░, рд╣рдо рднреА рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдФрд░ рдлрд┐рд░ рдмреИрд╕рд╛рдЦреА рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИред рдПрдХ WeakSet рдмрдирд╛рдПрдВ рдЬреЛ ViewHolder рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╕ рдЗрд╕ WeakSet рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

class Adapter : RecyclerView.Adapter {
    val activeViewHolders = WeakSet<ViewHolder>()
        
    fun onBindViewHolder(holder: ViewHolder, position: Int) {
        activeViewHolders.add(holder)
    }

    fun onViewRecycled(holder: ViewHolder) {
        activeViewHolders.remove(holder)
    }
}

рджреЗрдЦреЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдУрд╡рд░рд▓реЗ


рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкрд╣рд▓реЗ, рдЕрдЧрд░ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдиреЗ рд╕реНрдЯрд┐рдХрд░ рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдиреА рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА, рддреЛ рд╣рдордиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛:



рдпрд╣ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдмреЗрд╣рддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрд╣рд╛рдирд┐рдпрд╛рдВ рдЙрдЬреНрдЬреНрд╡рд▓ рд╕рд╛рдордЧреНрд░реА рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣рд╛рдВ рдПрдХ рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ:



рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рд╣рдорд╛рд░рд╛ рд╕рдВрджреЗрд╢ рд╡реНрдпреВрд╣реЛрд▓реНрдбрд░ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдиреАрдЪреЗ рд╕рдЦреНрддреА рд╕реЗ рд╕реНрдерд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╡реЗ рдУрд╡рд░рд▓реИрдк рдХрд░рддреЗ рд╣реИрдВред рддреБрд░рдВрдд рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЖрдк рдПрдХ рдФрд░ ViewType "рдЗрддрд┐рд╣рд╛рд╕ + рд╕реНрдЯрд┐рдХрд░" рдпрд╛ "рдЗрддрд┐рд╣рд╛рд╕ + рд╡реЙрдЗрд╕ рд╕рдВрджреЗрд╢" рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, 70 ViewType рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 140 рд╣реЛрдЧрд╛ ... рдирд╣реАрдВ, рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



Android рдореЗрдВ рдЖрдкрдХреА рдкрд╕рдВрджреАрджрд╛ рдмреИрд╕рд╛рдЦреА рдорди рдореЗрдВ рдЖрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рдХрд░ рд░рд╣реЗ рдереЗ, рд▓реЗрдХрд┐рди Pixel рдкрд░рдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд▓рд╕реНрдпред рдирддреАрдЬрддрди, рд╣рдо рдорд╛рд░реНрдЬрд┐рди = -2 рдбреАрдкреА (рдирдХрд╛рд░рд╛рддреНрдордХ) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдм рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рд░реНрдЬрд┐рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯрд┐рдХрд░ рдЪрд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдЦрд╛рд▓реА рд░рд╣реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдЗрдЯрдордбреАрдХреНрдпреВрд▓реЗрд╢рди рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдЗрдЯрдордСрдлрд╕реЗрдЯ рд╣рдо рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдУрд╡рд░рд▓реЗ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рд░рд╣рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ ViewHolder рджреЛрд╕реНрдд рд╣реЛрддрд╛ рд╣реИред

рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рдиред

class OffsetItemDecoration : RecyclerViewItemDecoration() {
    overrride fun getItemOffsets(offset: Rect, тАж) {
        offset.top = -100dp
    }
}

Idlehandler


рдпрд╣ рдПрдХ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдорд╛рдорд▓рд╛ рд╣реИ, рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрдХреНрд╕рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдБ рдХрд┐ рдореБрдЦреНрдп UiThread рдереНрд░реЗрдб рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛: рдПрдХ рдХрд╛рд░реНрдп рдИрд╡реЗрдВрдЯ рдХрддрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдп рд╣реИрдВрдбрд▓рд░.рдкреЛрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдЬреЛ рдЗрд╕ рдХрддрд╛рд░ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, UiThread рдЕрднреА (рд╕рдЪреНрдЪрд╛) рд╣реИред рдпрджрд┐ рдХрд╛рд░реНрдп рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рдЙрдирдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред



рд╣рдорд╛рд░реА рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдореЗрдВ, рд╣реИрдВрдбрд▓рд░ рдХрддрд╛рд░ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рд▓реВрдкрд░ рдЕрдВрддрд╣реАрди рд░реВрдк рд╕реЗ рдХрддрд╛рд░ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ UI рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкрдврд╝рд╛ - рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдЬрдм рд╣рдо рдЗрд╕реЗ рдпреВрдЖрдИ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрднреА рдпрд╛ 20 рдПрдордПрд╕ рдХреЗ рдмрд╛рджред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд░ рдХреЛ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдлрд┐рд░, рд╢рд╛рдпрдж рдпрд╣ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдкрд░ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрдм рдпрд╣ рдореБрдлрд╝реНрдд рд╣реИ? рдпрд╣реА рд╣реИ, рдпрд╣ рдЬрд╛рдирдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрдм рд╡рд╛рдЯреНрд╕рдПрд╡рдирдЯрд╕реНрдХ рд▓рд╛рдЗрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рд▓реВрдкрд░ рдореЗрдВ рдПрдХ AddIdleHandler рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЬрдм рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

Looper.myQueue ()ред AddIdleHandler ()

рдФрд░ рдлрд┐рд░ IdleHandler рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

@AnyThread
class IdleHandler {
    private val handler = Handler(Looper.getMainLooper())

    fun post(task: Runnable) {
        handler.post {
            Looper.myQueue().addIdleHandler {
                task.run()
                return@addIdleHandler false
            }
        }
    }
}

рдЙрд╕реА рддрд░рд╣, рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдПрдХ рдИрдорд╛рдирджрд╛рд░ рдардВрдб рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрдореЛрдЬреА


рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рдХрд╕реНрдЯрдо рдЗрдореЛрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрдореЛрдЬреА рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВред рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдЗрдореЛрдЬреА рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмреАрдЪ рдореЗрдВ ...



рдПрдХ рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:



рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рд╣реА рдЗрдореЛрдЬреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЬрд┐рди рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рд╡реЗ рдЕрд▓рдЧ рд╣реИрдВред рдореБрдЭреЗ рд╕рдмрд╕реЗ рдиреАрдЪреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

VKontakte рд╕реЗ рдПрдХ рдмрд╛рдЗрдХ рд╣реИред ~ 2014 рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдЗрдореЛрдЬреА рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ред рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдпрд╛рдж рд╣реИ - "рдорд╛рд░реНрд╢рдореИрд▓реЛ" рдерд╛ред рдЙрдирдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдПрдХ рдорд┐рдиреА-рджрдВрдЧрд╛ рд╢реБрд░реВ рд╣реБрдЖред рдмреЗрд╢рдХ, рд╡рд╣ "рджреАрд╡рд╛рд░ рдХреА рд╡рд╛рдкрд╕реА" рд╕реНрддрд░ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреА рдереА, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдереАред рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдЗрдореЛрдЬреА рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рдорд╣рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИред

рдЗрдореЛрдЬреА рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рдмрд┐рдЯрдореИрдк рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рд╕рднреА рдПрдХ рдмрдбрд╝реЗ "рдПрдЯрд▓рд╕" рдореЗрдВ рдЗрдХрдЯреНрдареЗ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВ - рдЕрд▓рдЧ рдбреАрдкреАрдЖрдИ рдХреЗ рддрд╣рддред рдФрд░ рдПрдХ EmojiSpan рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ: рдореИрдВ "рдРрд╕реЗ рдФрд░-рдРрд╕реЗ" рдЗрдореЛрдЬреА рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдРрд╕реЗ рдмрд┐рдЯрдореИрдк рдореЗрдВ рд╣реИ (x, y)ред
рдФрд░ рдПрдХ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯрд╕реНрдкреИрди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдкреИрди рдХреЗ рддрд╣рдд рдкрд╛рда рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣реА рд╣реИ, рдЖрдк рдкрд╛рда рдореЗрдВ рдЗрдореЛрдЬреА рдкрд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЗрдореЛрдЬреАрд╕реНрдкреИрди рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рдВрдЫрд┐рдд рдЗрдореЛрдЬреА рдЦреАрдВрдЪрддрд╛ рд╣реИред



рд╡реИрдХрд▓реНрдкрд┐рдХ


рдмрдврд╝


рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рдлреБрд▓рд╛рд╡ рдзреАрдорд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд▓реЗрдЖрдЙрдЯ рд╣реА рди рдмрдирд╛рдПрдВ, рдлреБрд▓рд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдмрдЪреЗрдВред рдФрд░ рдЗрд╕ рддрд░рд╣ 100500 ViewHolder рд╕реЗ рдмрдЪрдХрд░ рд╕рдм рдХреБрдЫ рддреЗрдЬ рдХрд░ рджреЗрдВред рдпрд╣ рдПрдХ рднреНрд░рдо рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдХреБрдЫ рдХрд░реЗрдВ, рдпрд╣ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

Android рдореЗрдВ рдПрдХ рдбреАрдмрдЧ рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕рдореЗрдВ startMethodTracing рдФрд░ stopMethodTracing рд╣реИред

Debug.startMethodTracing(тАЬtrace┬╗)
inflate(...)
Debug.stopMethodTracing()

рдпрд╣ рд╣рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред



рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдБ рднреА рдРрд╕рд╛ рд╣реИ рдХрд┐ рдЕрджреГрд╢реНрдп рднреА рд╣реИред рд╕рдордп рдХрд╛ рдПрдХ рдЪреМрдерд╛рдИ рдбреНрд░реЙрдЗрдВрдЧ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдЪреМрдерд╛рдИ рд░рдВрдЧ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рдерд╛ред рдФрд░ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЖрджрд┐ рднрд╛рдЧ рд╣реА рд╣рдорд╛рд░реА рдЖрдордж рд╣реИред

рдореИрдВрдиреЗ XML рд▓реЗрдЖрдЙрдЯ рдХреЛ рдХреЛрдб рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд▓рдЧрднрдЧ 0.5 ms рдмрдЪрд╛ рд▓рд┐рдпрд╛ред рд╡реГрджреНрдзрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИред рдФрд░ рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрд╛рдиреА, рдкреБрдирд░реНрд▓реЗрдЦрди рд╕реЗ рдмрд╣реБрдд рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд▓рдВрдмреА рдЖрдордж рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрд╡реЗрджрди рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ VKontakte рдЖрд╡реЗрджрди рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рдЧрднрдЧ 200-300 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреНрд░реАрди рд╣реИрдВ, рдФрд░ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреНрд░реИрд╢ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

Anko


Anko рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкрджрд╛рд╡рдирдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╡реИрд╕реЗ рднреА, Anko рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░рд▓ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЪреАрдиреА рд╣реИред рдпрд╣ рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рд╢рд░реНрдд рдирдП рджреГрд╢реНрдп () рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, Anko рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рд╣реИред

рд▓рд┐рдереЛ / рд╕реНрдкрдВрджрди


рдореИрдВрдиреЗ рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдорд┐рд▓рд╛рдпрд╛? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░рд╡рд╛рд╕рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдЙрдзрд╛рд░ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рдорд┐рд▓реЗрдЧрд╛ред рдФрд░ рд╣рдореЗрдВ рдирдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рдорд┐рд▓реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдХрд░рдгреЛрдВ рд╡рд╛рд▓реЗ рд▓рд╛рдЦреЛрдВ рд▓реЛрдЧ рд╣рд░ рдорд┐рдирдЯ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЖрдк рд╢рд╛рдпрдж рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЪреМрдерд╛рдИ рднреА рдирд╣реАрдВ рд╕реБрдирддреЗ рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрджреЗрд╢ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реЗ рдХреЛрдб рдЖрдзрд╛рд░ рд╣реИрдВред рд╕рдм рдХреБрдЫ рддреБрд░рдВрдд рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рдкреНрд░рдЪрд╛рд░ рдХреЗ рдХрд╛рд░рдг рдРрд╕рд╛ рдХрд░рдирд╛ рдмреЗрд╡рдХреВрдлреА рд╣реИред рдЦрд╛рд╕рддреМрд░ рдкрд░ рддрдм рдЬрдм рдЬреЗрдЯрдкреИрдХ рдХрдВрдкреЛрдЬ рдХрд╣реАрдВ рджреВрд░ рддрдХ рдХрд░рдШрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЬреЗрдЯрдкреИрдХ рд░рдЪрдирд╛


Google рд╕рднреА рд╣рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд░реНрдЧ рд╕реЗ рдордиреНрдирд╛ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЕрд▓реНрдлрд╛ рдореЗрдВ рд╣реИред рдФрд░ рд░рд┐рд▓реАрдЬ рдХрдм рд╣реЛрдЧреА - рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реИред рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдореЗрдВ рдЖрдиреЗ рджреЗрдВ, рдореБрдЦреНрдп рдХреАрдбрд╝реЗ рдХреЛ рдкрд╛рд╕ рдЖрдиреЗ рджреЗрдВред рдФрд░ рддрднреА рд╣рдо рдЙрд╕рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред

рдПрдХ рдмрдбрд╝рд╛ рдХрд╕реНрдЯрдо рджреГрд╢реНрдп


рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдХрд┐ рдЬреЛ рд▓реЛрдЧ рд╡рд┐рднрд┐рдиреНрди рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ: "рдПрдХ рдмрдбрд╝реЗ рдХрд╕реНрдЯрдо рд╡реНрдпреВ рдХреЛ рд▓реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ, рдХреЛрдИ рдЬрдЯрд┐рд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рдирд╣реАрдВред"

рдиреБрдХрд╕рд╛рди рдХреНрдпрд╛ рд╣реИрдВ?

  • рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдХрдард┐рди рд╣реИ
  • рд╡рд░реНрддрдорд╛рди рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред

рдПрдВрдбреНрд░реЙрдЗрдб 4.3 рдХреЗ рд╕рд╛рде, рд╡реНрдпреВ рдХреЗ рдЕрдВрджрд░ рдЖрдВрддрд░рд┐рдХ рдХреИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкрдВрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рджреГрд╢реНрдп рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдСрдирдорд░реНрд╕ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдкрд┐рдЫрд▓реЗ рдорд╛рдк рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдВрдбреНрд░реЙрдЗрдб 4.3-4.4 рдХреЗ рд╕рд╛рде, рдПрдХ рд░реЗрдВрдбрд░рдиреЛрдб (рдбрд┐рд╕реНрдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ) рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдХреИрд╢рд┐рдВрдЧ рд░реЗрдВрдбрд░рд┐рдВрдЧред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕рдВрд╡рд╛рдж рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╕реЗрд▓ рд╣реИ: рдЕрд╡рддрд╛рд░, рд╢реАрд░реНрд╖рдХ, рдЙрдкрд╢реАрд░реНрд╖рдХ, рдкрдврд╝рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐, рд╕рдордп, рдПрдХ рдФрд░ рдЕрд╡рддрд╛рд░ред рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ - 10 рддрддреНрд╡ред рдФрд░ рд╣рдордиреЗ рдХрд╕реНрдЯрдо рд╡реНрдпреВ рд▓рд┐рдЦрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, рд╣рдо рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдорд╛рдкреЗрдВрдЧреЗред рдпрд╣реА рд╣реИ, рдмрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд░реНрдЪ рдХрд░реЗрдВред рд╡реНрдпреВрдЧреНрд░реБрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдПрдХ рдЕрд▓рдЧ рджреГрд╢реНрдп рд╣реИ, рдЬрдм рдЖрдк рдХрд┐рд╕реА рдПрдХ рджреГрд╢реНрдп рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рджреГрд╢реНрдп рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░реЗрдВрдЧреЗ (рд╕рд┐рд╡рд╛рдп рдЬрдм рдпрд╣ рджреГрд╢реНрдп рджреВрд╕рд░реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ)ред

рд╕рд╛рд░рд╛рдВрд╢


рддреЛ, рдЖрдкрдиреЗ рд╕реАрдЦрд╛ рд╣реИ рдХрд┐ рд╣рдо рдорд╛рдирдХ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ RecyclerView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЧреИрд░-рдорд╛рдирдХ рд▓реЛрдЧреЛрдВ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдореМрд▓рд┐рдХ рд╕рдВрджреЗрд╢ ViewHolder рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрдХреАрд░реНрдг рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдкрд░ рднреА рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 10 рд╣рдЬрд╛рд░ рд╡рд░реНрдгреЛрдВ рдХреЗ рдмрдбрд╝реЗ рдкрд╛рда рдкрд░ред рдЗрд╕реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдПрдХ рдЕрд▓рдЧ ViewHolder рд╣реИред

рдпрд╣ @WorkerThread рдкрд░ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ: рд▓рд┐рдВрдХрд┐рдВрдЧ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛, рдбрд┐рдлреБрдЯрд┐рд▓реНрд╕ - рдЬрд┐рд╕рд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ @ рдпреВрдЖрдИрдЯрд╣реЗрдб рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рдирд╛ред

рд╡реИрд╢реНрд╡рд┐рдХ RecycledViewPool рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдЪрд▓рдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ ViewHolder рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдЕрднреА рддрдХ рддрдп рдирд╣реАрдВ рдХреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдлреБрд▓рд╛рдпрд╛, рдпрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛ред

, Mobius 2019 Piter , . , , SQLite, . Mobius 2020 Piter .

All Articles