I try to find more efficient modifications with minimal code changes, but in any case there are a lot of changes. We need thoroughly test the app to ensure that everything works fine before merging.
In first commit I use
constraintLayout2. More simple containers often works faster. This turned out to be true for our case as well. Perhaps there is a small change inside this commit that makes a decisive contribution to the performance gain as was with !1374 (merged), but I didn't find it for now.
This modification improve UI speed (#2528 (closed)) and almost solves problem with release build on Samsung Note 4 (#2315 (comment 321559)).
UI appearing time (landscape orientation, video paused, animation disabled):
- Samsung Note 4, Android 6.0.1 (debug): ~35 ms.
- Samsung Note 4, Android 6.0.1 (release): ~95 ms.
- Lenovo P2a42. Android 6.0.1 (release): ~45 ms.
- Xiaomi 11T, Android 12 (release): ~40 ms.
- Sony C6603, Android 5.1.1 (release): 30-120 ms.
Screenshot from profiler and trace-file after first commit:Note_4_after_commit_1_cpu-art-20220518T182219.trace
Next I want to do is removing
RelativeLayout. Using RelativeLayout leads to double measuring all child views. If you use RelativeLayout inside RelativeLayout, children of inner layout will be measured 4 times. Next 2 commit replace
FrameLayout. After this modification UI appearing time on Samsung Note 4 (release) is ~58 ms.
You can notice on screenshot from profiler that
measure section is much less than it was before.
Screenshot from profiler and trace-file after removing