You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Note: This issue is somewhat technical and barely even noticeable in-app. Only logging this here so I can keep track of my ideas regarding how to resolve this system. You're probably better off ignoring this unless you really like wrangling RecyclerView.Adapter diffing implementation details.
Update the internal list system to provide different behavior in different situations.
Currently, Auxio uses a bunch of different strategies to update list information, including:
Asynchronous updates that cause items to jump around (Seen in detail views when resorting). These don't look nice visually, but are fast.
Synchronous updates that are used in editable lists such as the queue. These are relatively stabler compared to asynchronous updates, but are also degrade performance due to the ~O(nlogn) complexity of these updates and how they are ran on the main thread. You can see this in the app by moving items around in a large queue and setting how much the app freezes up.
Replace updates that fade the current list out and fade a new list in. This is seen in the home view. Generally nice for resorting operations, but not for any other kind of list update. The issue is that replace updates and asynchronous updates cannot be applied to the same adapter, as the class used (AsyncListDiffer) only allows asynchronous updating and trying to manually overwrite the list is extremely dangerous.
In practice, much of the app needs combinations of these updates, new types of updates, or different updates entirely.
I hope to soon unify all these operations under a single set of actions in a way that will not cause list inconsistency crashes using a datatype like:
Note: This issue is somewhat technical and barely even noticeable in-app. Only logging this here so I can keep track of my ideas regarding how to resolve this system. You're probably better off ignoring this unless you really like wrangling
RecyclerView.Adapter
diffing implementation details.Update the internal list system to provide different behavior in different situations.
Currently, Auxio uses a bunch of different strategies to update list information, including:
O(nlogn)
complexity of these updates and how they are ran on the main thread. You can see this in the app by moving items around in a large queue and setting how much the app freezes up.AsyncListDiffer
) only allows asynchronous updating and trying to manually overwrite the list is extremely dangerous.In practice, much of the app needs combinations of these updates, new types of updates, or different updates entirely.
I hope to soon unify all these operations under a single set of actions in a way that will not cause list inconsistency crashes using a datatype like:
Adapters would receive a new list from the
ViewModel
alongside this new datatype that instructs them how to visually signal the list change.The end benefits of this change should be:
The text was updated successfully, but these errors were encountered: