mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Switch to using ViewManagerResolver for view managers
Summary: Right now the FbReactInstanceDelegate provides a list of view managers to the instance during initialization, this means that we're basically eagerly loading all of the view manager classes. In this change we use ViewManagerResolver instead. Changelog: [Android][Changed] - Move ViewManagerResolver into a seperate file Reviewed By: mdvacca Differential Revision: D26424214 fbshipit-source-id: 550ade31c256a56d6e32c463f112ea16dd55a218
This commit is contained in:
committed by
Facebook GitHub Bot
parent
099f67cf8a
commit
eaedb10755
@@ -35,6 +35,7 @@ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
||||
import com.facebook.react.uimanager.UIImplementationProvider;
|
||||
import com.facebook.react.uimanager.UIManagerModule;
|
||||
import com.facebook.react.uimanager.ViewManager;
|
||||
import com.facebook.react.uimanager.ViewManagerResolver;
|
||||
import com.facebook.systrace.Systrace;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -175,8 +176,8 @@ public class CoreModulesPackage extends TurboReactPackage implements ReactPackag
|
||||
Systrace.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "createUIManagerModule");
|
||||
try {
|
||||
if (mLazyViewManagersEnabled) {
|
||||
UIManagerModule.ViewManagerResolver resolver =
|
||||
new UIManagerModule.ViewManagerResolver() {
|
||||
ViewManagerResolver resolver =
|
||||
new ViewManagerResolver() {
|
||||
@Override
|
||||
public @Nullable ViewManager getViewManager(String viewManagerName) {
|
||||
return mReactInstanceManager.createViewManager(viewManagerName);
|
||||
|
||||
@@ -67,7 +67,7 @@ public class UIImplementation {
|
||||
|
||||
public UIImplementation(
|
||||
ReactApplicationContext reactContext,
|
||||
UIManagerModule.ViewManagerResolver viewManagerResolver,
|
||||
ViewManagerResolver viewManagerResolver,
|
||||
EventDispatcher eventDispatcher,
|
||||
int minTimeLeftInFrameForNonBatchedOperationMs) {
|
||||
this(
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ public class UIImplementationProvider {
|
||||
|
||||
public UIImplementation createUIImplementation(
|
||||
ReactApplicationContext reactContext,
|
||||
UIManagerModule.ViewManagerResolver viewManagerResolver,
|
||||
ViewManagerResolver viewManagerResolver,
|
||||
EventDispatcher eventDispatcher,
|
||||
int minTimeLeftInFrameForNonBatchedOperationMs) {
|
||||
Systrace.beginSection(
|
||||
|
||||
@@ -89,21 +89,6 @@ public class UIManagerModule extends ReactContextBaseJavaModule
|
||||
implements OnBatchCompleteListener, LifecycleEventListener, UIManager {
|
||||
public static final String TAG = UIManagerModule.class.getSimpleName();
|
||||
|
||||
/** Enables lazy discovery of a specific {@link ViewManager} by its name. */
|
||||
public interface ViewManagerResolver {
|
||||
/**
|
||||
* {@class UIManagerModule} class uses this method to get a ViewManager by its name. This is the
|
||||
* same name that comes from JS by {@code UIManager.ViewManagerName} call.
|
||||
*/
|
||||
@Nullable
|
||||
ViewManager getViewManager(String viewManagerName);
|
||||
|
||||
/**
|
||||
* Provides a list of view manager names to register in JS as {@code UIManager.ViewManagerName}
|
||||
*/
|
||||
List<String> getViewManagerNames();
|
||||
}
|
||||
|
||||
/** Resolves a name coming from native side to a name of the event that is exposed to JS. */
|
||||
public interface CustomEventNamesResolver {
|
||||
/** Returns custom event name by the provided event name. */
|
||||
|
||||
+1
-2
@@ -31,8 +31,7 @@ import java.util.Map;
|
||||
* UIManager.getViewManagerConfig('SpecificViewManager')} call happens. The View Manager is then
|
||||
* registered on the JS side with the help of {@code UIManagerModule.getConstantsForViewManager}.
|
||||
*/
|
||||
/* package */ static Map<String, Object> createConstants(
|
||||
UIManagerModule.ViewManagerResolver resolver) {
|
||||
/* package */ static Map<String, Object> createConstants(ViewManagerResolver resolver) {
|
||||
Map<String, Object> constants = UIManagerModuleConstants.getConstants();
|
||||
constants.put("ViewManagerNames", resolver.getViewManagerNames());
|
||||
constants.put("LazyViewManagersEnabled", true);
|
||||
|
||||
@@ -19,9 +19,9 @@ import java.util.Map;
|
||||
public final class ViewManagerRegistry {
|
||||
|
||||
private final Map<String, ViewManager> mViewManagers;
|
||||
private final @Nullable UIManagerModule.ViewManagerResolver mViewManagerResolver;
|
||||
private final @Nullable ViewManagerResolver mViewManagerResolver;
|
||||
|
||||
public ViewManagerRegistry(UIManagerModule.ViewManagerResolver viewManagerResolver) {
|
||||
public ViewManagerRegistry(ViewManagerResolver viewManagerResolver) {
|
||||
mViewManagers = MapBuilder.newHashMap();
|
||||
mViewManagerResolver = viewManagerResolver;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
package com.facebook.react.uimanager;
|
||||
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** Enables lazy discovery of a specific {@link ViewManager} by its name. */
|
||||
public interface ViewManagerResolver {
|
||||
/**
|
||||
* {@class UIManagerModule} class uses this method to get a ViewManager by its name. This is the
|
||||
* same name that comes from JS by {@code UIManager.ViewManagerName} call.
|
||||
*/
|
||||
@Nullable
|
||||
ViewManager getViewManager(String viewManagerName);
|
||||
|
||||
/**
|
||||
* Provides a list of view manager names to register in JS as {@code UIManager.ViewManagerName}
|
||||
*/
|
||||
List<String> getViewManagerNames();
|
||||
}
|
||||
Reference in New Issue
Block a user