ReactNative源码分析之NativeViewHierarchyManager

本文主要分析ReactNative 0.61.5版本中的NativeViewHierarchyManager,它作为视图层级管理器,负责管理所有View及其ViewManager。通过ViewTag,该类能查找并操作对应的View和ViewManager。创建、更新View属性和布局的操作都通过这个映射关系进行,且所有操作必须在UI线程中执行。
摘要由CSDN通过智能技术生成

当前分析的ReactNative版本为0.61.5:

看这边文章前最好先了解UIManagerModule、UIImplementation、UIViewOperationQueue类;

1.ReactNative源码分析之UIManagerModule.
2.ReactNative源码分析之UIViewOperationQueue.
3.ReactNative源码分析之UIImplementation.

我们看NativeViewHierarchyManager的名字就知道,它其实是一个管理类,管理所有的View。

先来看下它的私有字段:

  private final SparseArray<View> mTagsToViews;
  private final SparseArray<ViewManager> mTagsToViewManagers;
  private final ViewManagerRegistry mViewManagers;

从这几个字段我们就能猜测,它管理着所有的ViewManager和对应的View,映射关系是通过int值关联,这个int值其实就是ViewTag。

我们找几个方法看看具体实现:

  public final synchronized View resolveView(int tag) {
   
    View view = mTagsToViews.get(tag);
    if (view == null) {
   
      throw new IllegalViewOperationException(
          "Trying to resolve view with tag " + tag + " which doesn't exist");
    }
    return view;
  }

这个是根据ViewTag,查找对应的View。

  public final synchronized ViewManager resolveViewManager(int tag) {
   
    ViewManager viewManager = mTagsToViewManagers.get(tag);
    if (viewManager == null) {
   
      boolean alreadyDropped = Arrays.asList(mDroppedViewArray).contains(tag);
      throw new IllegalViewOperationException(
          "ViewManager for tag "
              + tag
              + " could not be found.\n View already dropped? "
              + alreadyDropped
              + ".\nLast index "
              + mDroppedViewIndex
              + " in last 100 views"
              + mDroppedViewArray.toString());
    }
    return viewManager;
  }

这个是通过ViewTag,查找对应的ViewManager。

在之前的文章提到UIViewOperationQueue类,所有对View的UI操作本质上是由NativeViewHierarchyManager代理执行,想操作哪个View&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值