Optymalizacja hierarchii widoków na przykładzie aplikacji "Stereoscopic Image Calculator" realizowanej w ramach projektu ROS3D. Celem prezentacji jest omówienie sposobu renderowania widoków jako podstawy do opracowywania wydajnych aplikacji na platformę Android.
6. Przed Jelly Bean
ViewRoot.java
public final class ViewRoot extends Handler ... {
...
public void scheduleTraversals() {
if (!mTraversalScheduled) {
mTraversalScheduled = true;
sendEmptyMessage(DO_TRAVERSAL);
}
}
...
public void handleMessage(Message msg) {
...
case DO_TRAVERSAL:
performTraversals();
...
}
}
32. OnPreDrawListener
// 1. Save layout state and wait for next frame.
getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
getViewTreeObserver().removeOnPreDrawListener(this);
// 2. Restore original layout state.
// 3. Trigger animators towards new layout state.
}
}
33. Nie wywołuj layout() podczas layout
Nie wywołuj layout() podczas animacji
Wywołuj invalidate() tylko na tych elementach,
które chcesz przerysować
Pamiętaj!