Skip to main content
Recyclerview View pool

Android Recyclerview View pool! what is that?

Where do the RecycledViews go ?

Most of us think that the RecyclerView picks recycled views from the ViewPool but that is not true, before consulting the ViewPool, there are multiple levels of caches that the RecyclerView goes through in the hunt for a ViewHolder, the Scrap, hidden views, ViewCache and the ViewCacheExtension.

The most prominent of those is the ViewCache, so let’s discuss when does a ViewHolder go into the ViewCache and when into the ViewPool. Once a ViewHolder gets recycled, it is pushed into the ViewCache which has a default size of 2, so it can hold as much as 2 views within it, after which it pushes the ViewHolders into the ViewPool, which acts like a Stack of ViewHolders.

So what’s the difference in keeping the ViewHolders in the ViewCache or the ViewPool, the ViewHolders in the ViewCache retain some of their state including the Position they were attached to, so these can be used as it is when needed again, whereas the ViewHolders in the ViewPool are dirty, they do retain some of their state but they need to be invalidated and rebound before being reused.

You can set a custom ViewCache size for your RecyclerView using the setItemViewCacheSize() method. When creating an App where scrolling up and down occurs often then try setting a larger size of the ViewCache because the ViewHolders in the ViewCache retain their state and can be reused at it is, so rebinding won’t be required while scrolling and the User Experience will be smooth.

Comments

Popular posts from this blog

How will you track foreground and background events in android? Implementing a Foreground and Background Handler First, lets create our interface that will be implemented by a custom Application class. Something as simple as this: interface LifecycleDelegate { fun onAppBackgrounded() fun onAppForegrounded() } we could use onTrimMemory and the TRIM_MEMORY_UI_HIDDEN flag to detect background events. So lets do that now. Add this into the onTrimMemory method callback body if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) { // lifecycleDelegate instance was passed in on the constructor lifecycleDelegate.onAppBackgrounded() } So now we have the background event covered lets handle the foreground event. To do this we are going to use the onActivityResumed. This method gets called every time any Activity in your app is resumed, so this could be called multiple times if you have multiple Activities. What we will do is use a flag...
Have you ever used Room how to implement room db? Room is an ORM, Object Relational Mapping library. In other words, Room will map our database objects to Java objects. Room provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite. Database : This component represents data holder. The annotated class should be an abstract class that extends RoomDatabase. At runtime, you can acquire an instance of it by calling Room.databaseBuilder() or Room.inMemoryDatabaseBuilder(). DAO : DAOs are the main component of Room and are responsible for defining the methods that access the database. All queries are written in DAO only. IEntity : This component represents a database row of table. Each field of the entity is persisted in the database unless you annotate it with @Ignore . Difference between room and sqlite In case of SQLite, There is no compile tim...