Code Fragment-UI加载策略之-可视者优先加载

时间:2022-03-13 20:22:18

通常情况

  • 通常程序的UI不太复杂,我们会直接加载这些UI信息
复杂的UI
  • 加载的元素就相对多一些。
  • 加载的数据相对多。
  • 因为UI元素和数据元素都比较多,加载的时间相对多。

可视者优先加载

  • 不是默认的加载顺序,而是有选择的加载一些首先用户看到的UI,再去加载暂时没有看到的。
  • 例如1:
    • 当Launcher启动的时候,在桌面上会有默认的5个屏幕的widget UI,通常的一般思考是从左到右,依次加载,但是,我们可以首先加载用户所看到的当前屏,也就是说首先加载当前页,然后加载第1,2,4,5页。
    • 一般的加载方式
      • Code Fragment-UI加载策略之-可视者优先加载
    • Launcher实际的加载方式
      • Code Fragment-UI加载策略之-可视者优先加载
    • 加载相关的code处理
      • // once for the current screen
        for (int i = 0; i < N; i++) {
        final LauncherAppWidgetInfo widget = sAppWidgets.get(i);
        if (widget.screen == currentScreen) {//首先加载当前页
        mHandler.post(new Runnable() {
        public void run() {
        Callbacks callbacks = tryGetCallbacks(oldCallbacks);
        if (callbacks != null) {
        callbacks.bindAppWidget(widget);
        }
        }
        });
        }
        }
        // once for the other screens
        for (int i = 0; i < N; i++) {//再根据顺序,从第1页开始加载。
        final LauncherAppWidgetInfo widget = sAppWidgets.get(i);
        if (widget.screen != currentScreen) {
        mHandler.post(new Runnable() {
        public void run() {
        Callbacks callbacks = tryGetCallbacks(oldCallbacks);
        if (callbacks != null) {
        callbacks.bindAppWidget(widget);
        }
        }
        });
        }
        }
  • 例如2
    • 当Launcher程序启动的时候,会先判断,是在桌面还是menu(所有应用所在屏)这一屏,如果退出前在桌面,那么先加载桌面相关的,然后再加载menu。如果退出前记录的位置是在menu,那么先加载menu,后加载桌面。
    • 图示:
      • 情况1
        • Code Fragment-UI加载策略之-可视者优先加载
      • 情况2
        • Code Fragment-UI加载策略之-可视者优先加载
    • code:
      • if (loadWorkspaceFirst) {//step1,load the a
        loadAndBindWorkspace();
        } else {
        loadAndBindAllApps();
        }
        ....
        if (loadWorkspaceFirst) {//step2,load the b
        loadAndBindAllApps();
        } else {
        loadAndBindWorkspace();
        }