类com.facebook.react.bridge.CatalystInstance源码实例Demo

下面列出了怎么用com.facebook.react.bridge.CatalystInstance的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: MetroExample   文件: JsLoaderUtil.java
public static void fromAssets(Application application, String bundleName, boolean isSync) {
    if (hasBundle(bundleName) || JsLoaderUtil.jsState.isDev) {
        return;
    }
    String source = bundleName;
    if (!bundleName.startsWith("assets://")) {
        source = "assets://" + bundleName;
    }
    if (!source.endsWith(jsState.bundleSuffix)) {
        source = source + jsState.bundleSuffix;
    }
    CatalystInstance catalyst = getCatalyst(application);
    try {
        if (catalyst != null) {
            catalyst.loadScriptFromAssets(application.getAssets(), source, isSync);
            addBundle(bundleName);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
 
源代码2 项目: MetroExample   文件: JsLoaderUtil.java
public static void fromFile(Application application, String bundleName, String sourceUrl, boolean isSync) {
    if (hasBundle(sourceUrl) || JsLoaderUtil.jsState.isDev) {
        return;
    }
    if (TextUtils.isEmpty(jsState.filePath)) {
        setDefaultFileDir(application);
    }
    String bundleDir = jsState.filePath;

    CatalystInstance catalyst = getCatalyst(application);
    try {
        if (catalyst != null) {
            catalyst.loadScriptFromFile(bundleDir + File.separator + bundleName, sourceUrl, isSync);
            addBundle(sourceUrl);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
 
@ReactMethod
void callJavaScript() {
    Activity activity = getCurrentActivity();
    if (activity != null) {
        MainApplication application = (MainApplication) activity.getApplication();
        ReactNativeHost reactNativeHost = application.getReactNativeHost();
        ReactInstanceManager reactInstanceManager = reactNativeHost.getReactInstanceManager();
        ReactContext reactContext = reactInstanceManager.getCurrentReactContext();

        if (reactContext != null) {
            CatalystInstance catalystInstance = reactContext.getCatalystInstance();
            WritableNativeArray params = new WritableNativeArray();
            params.pushString("Hello, JavaScript!");

            // AFAIK, this approach to communicate from Java to JavaScript is officially undocumented.
            // Use at own risk; prefer events.
            // Note: Here we call 'alert', which shows UI. If this is done from an activity that
            // doesn't forward lifecycle events to React Native, it wouldn't work.
            catalystInstance.callFunction("JavaScriptVisibleToJava", "alert", params);
        }
    }
}
 
源代码4 项目: MetroExample   文件: JsLoaderUtil.java
@Nullable
public static CatalystInstance getCatalyst(Application application) {
    ReactInstanceManager manager = getReactIM(application);
    if (manager == null) {
        return null;
    }
    ReactContext context = manager.getCurrentReactContext();
    if (context == null) {
        return null;
    }
    return context.getCatalystInstance();
}
 
@Nullable
public static CatalystInstance getCatalystInstance(ReactNativeHost host) {
    ReactInstanceManager manager = host.getReactInstanceManager();
    if (manager == null) {
        Log.e(TAG,"manager is null!!");
        return null;
    }

    ReactContext context = manager.getCurrentReactContext();
    if (context == null) {
        Log.e(TAG,"context is null!!");
        return null;
    }
    return context.getCatalystInstance();
}
 
public static void loadScriptFromAsset(Context context,
                                CatalystInstance instance,
                                String assetName,boolean isSync) {
    if (sLoadedScript.contains(assetName)) {
        return;
    }
    BridgeUtil.loadScriptFromAsset(context,instance,assetName,isSync);
    sLoadedScript.add(assetName);
}
 
public static void loadScriptFromFile(String fileName,
                                       CatalystInstance instance,
                                       String sourceUrl,boolean isSync) {
    if (sLoadedScript.contains(sourceUrl)) {
        return;
    }
    BridgeUtil.loadScriptFromFile(fileName,instance,sourceUrl,isSync);
    sLoadedScript.add(sourceUrl);
}
 
源代码8 项目: react-native-GPay   文件: ModuleDataCleaner.java
public static void cleanDataFromModules(CatalystInstance catalystInstance) {
  for (NativeModule nativeModule : catalystInstance.getNativeModules()) {
    if (nativeModule instanceof Cleanable) {
      FLog.d(ReactConstants.TAG, "Cleaning data from " + nativeModule.getName());
      ((Cleanable) nativeModule).clearSensitiveData();
    }
  }
}
 
源代码9 项目: react-native-GPay   文件: ReactInstanceManager.java
private void detachViewFromInstance(
    ReactRootView rootView,
    CatalystInstance catalystInstance) {
  Log.d(ReactConstants.TAG, "ReactInstanceManager.detachViewFromInstance()");
  UiThreadUtil.assertOnUiThread();
  if (rootView.getUIManagerType() == FABRIC) {
    catalystInstance.getJSModule(ReactFabric.class)
      .unmountComponentAtNode(rootView.getId());
  } else {
    catalystInstance.getJSModule(AppRegistry.class)
      .unmountApplicationComponentAtRootTag(rootView.getId());
  }

}
 
源代码10 项目: react-native-GPay   文件: ReactRootView.java
/**
 * Calls into JS to start the React application. Can be called multiple times with the
 * same rootTag, which will re-render the application from the root.
 */
/* package */ void runApplication() {
    Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "ReactRootView.runApplication");
    try {
      if (mReactInstanceManager == null || !mIsAttachedToInstance) {
        return;
      }

      ReactContext reactContext = mReactInstanceManager.getCurrentReactContext();
      if (reactContext == null) {
        return;
      }

      CatalystInstance catalystInstance = reactContext.getCatalystInstance();

      WritableNativeMap appParams = new WritableNativeMap();
      appParams.putDouble("rootTag", getRootViewTag());
      @Nullable Bundle appProperties = getAppProperties();
      if (appProperties != null) {
        appParams.putMap("initialProps", Arguments.fromBundle(appProperties));
      }
      if (getUIManagerType() == FABRIC) {
        appParams.putBoolean("fabric", true);
      }

      mShouldLogContentAppeared = true;

      String jsAppModuleName = getJSModuleName();
      catalystInstance.getJSModule(AppRegistry.class).runApplication(jsAppModuleName, appParams);
    } finally {
      Systrace.endSection(TRACE_TAG_REACT_JAVA_BRIDGE);
    }
}
 
源代码11 项目: react-native-GPay   文件: UIManagerHelper.java
/**
 * @return a {@link UIManager} that can handle the react tag received by parameter.
 */
public static UIManager getUIManager(ReactContext context, @UIManagerType int uiManagerType) {
  CatalystInstance catalystInstance = context.getCatalystInstance();
  return uiManagerType == FABRIC ?
    catalystInstance.getJSIModule(UIManager.class) :
    catalystInstance.getNativeModule(UIManagerModule.class);
}
 
源代码12 项目: react-native-GPay   文件: ReactTestHelper.java
public static ReactTestFactory.ReactInstanceEasyBuilder catalystInstanceBuilder(
    final ReactIntegrationTestCase testCase) {
  final ReactTestFactory.ReactInstanceEasyBuilder builder =
    getReactTestFactory().getCatalystInstanceBuilder();
  ReactTestFactory.ReactInstanceEasyBuilder postBuilder =
    new ReactTestFactory.ReactInstanceEasyBuilder() {
      @Override
      public ReactTestFactory.ReactInstanceEasyBuilder setContext(Context context) {
        builder.setContext(context);
        return this;
      }

      @Override
      public ReactTestFactory.ReactInstanceEasyBuilder addNativeModule(NativeModule module) {
        builder.addNativeModule(module);
        return this;
      }

      @Override
      public CatalystInstance build() {
        final CatalystInstance instance = builder.build();
        testCase.initializeWithInstance(instance);
        instance.runJSBundle();
        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
          @Override
          public void run() {
            ReactChoreographer.initialize();
            instance.initialize();
          }
        });
        testCase.waitForBridgeAndUIIdle();
        return instance;
      }
    };

  postBuilder.setContext(testCase.getContext());
  return postBuilder;
}
 
@Before
public void setup() {
  ReactApplicationContext mContext = new ReactApplicationContext(RuntimeEnvironment.application);
  CatalystInstance mCatalystInstanceMock = ReactTestHelper.createMockCatalystInstance();
  mContext.initializeWithInstance(mCatalystInstanceMock);
  mThemedContext = new ThemedReactContext(mContext, mContext);
  mManager = new ReactSliderManager();
}
 
源代码14 项目: react-native-GPay   文件: FabricReconcilerTest.java
@Before
public void setUp() {
  CatalystInstance catalystInstance = ReactTestHelper.createMockCatalystInstance();
  ReactApplicationContext reactContext =
      new ReactApplicationContext(RuntimeEnvironment.application);
  reactContext.initializeWithInstance(catalystInstance);
  List<ViewManager> viewManagers = new ArrayList<>();
  ViewManagerRegistry viewManagerRegistry = new ViewManagerRegistry(viewManagers);
  JavaScriptContextHolder jsContext = mock(JavaScriptContextHolder.class);
  EventDispatcher eventDispatcher = mock(EventDispatcher.class);
  mFabricUIManager = new FabricUIManager(reactContext, viewManagerRegistry, jsContext, eventDispatcher);
  mMockUIViewOperationQueue = new MockUIViewOperationQueue(reactContext);
  mFabricReconciler = new FabricReconciler(mMockUIViewOperationQueue);
}
 
protected void loadScript(final LoadScriptListener loadListener){
    final RnBundle bundle = getBundle();
    /** all buz module is loaded when in debug mode*/
    if(ScriptLoadUtil.MULTI_DEBUG){//当设置成debug模式时,所有需要的业务代码已经都加载好了
        loadListener.onLoadComplete(true,null);
        return;
    }
    ScriptType pathType = bundle.scriptType;
    String scriptPath = bundle.scriptUrl;
    final CatalystInstance instance = ScriptLoadUtil.getCatalystInstance(getReactNativeHost());
    if(pathType== ScriptType.ASSET) {
        ScriptLoadUtil.loadScriptFromAsset(getApplicationContext(),instance,scriptPath,false);
        loadListener.onLoadComplete(true,null);
    }else if(pathType== ScriptType.FILE){
        File scriptFile = new File(getApplicationContext().getFilesDir()
                +File.separator+/*ScriptLoadUtil.REACT_DIR+File.separator+*/scriptPath);
        scriptPath = scriptFile.getAbsolutePath();
        ScriptLoadUtil.loadScriptFromFile(scriptPath,instance,scriptPath,false);
        loadListener.onLoadComplete(true,scriptPath);
    }else if(pathType== ScriptType.NETWORK){
        initView();
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        dialogBuilder.setTitle("Loading jsBundle");
        dialogBuilder.setCancelable(false);
        final TextView tvv = new TextView(this);
        tvv.setText("conneting");//由于demo中把文件放在了github上,所以http建立连接要花好几秒时间
        tvv.setTextColor(Color.BLACK);
        tvv.setGravity(Gravity.CENTER);
        tvv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
        dialogBuilder.setView(tvv);
        mProgressDialog = dialogBuilder.create();
        mProgressDialog.show();
        //由于downloadRNBundle里面的md5参数由组件名代替了,实际开发中需要用到md5校验的需要自己修改
        FileUtils.downloadRNBundle(this.getApplicationContext(), scriptPath, getMainComponentName(), new UpdateProgressListener() {
            @Override
            public void updateProgressChange(final int precent) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if(tvv!=null) {
                            tvv.setText(String.valueOf(precent));
                        }
                    }
                });
            }

            @Override
            public void complete(boolean success) {
                if(mProgressDialog!=null){
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mProgressDialog.dismiss();
                            mProgressDialog = null;
                        }
                    });
                }
                if(!success){
                    loadListener.onLoadComplete(false,null);
                    return;
                }
                String info = FileUtils.getCurrentPackageMd5(getApplicationContext());
                String bundlePath = FileUtils.getPackageFolderPath(getApplicationContext(),info);
                String jsBundleFilePath = FileUtils.appendPathComponent(bundlePath,bundle.scriptPath);
                File bundleFile = new File(jsBundleFilePath);
                if(bundleFile!=null&&bundleFile.exists()){
                    ScriptLoadUtil.loadScriptFromFile(jsBundleFilePath,instance,jsBundleFilePath,false);
                }else{
                    success=false;
                }
                loadListener.onLoadComplete(success,jsBundleFilePath);
            }
        });
    }
}
 
源代码16 项目: react-native-multibundler   文件: ReactUtil.java
@Nullable
public static String getSourceUrl(CatalystInstance instance) {
    return instance.getSourceURL();
}
 
源代码17 项目: react-native-multibundler   文件: ScriptLoadUtil.java
@Nullable
public static String getSourceUrl(CatalystInstance instance) {
    return ReactUtil.getSourceUrl(instance);
}
 
源代码18 项目: react-native-GPay   文件: ReactInstanceManager.java
private void setupReactContext(final ReactApplicationContext reactContext) {
  Log.d(ReactConstants.TAG, "ReactInstanceManager.setupReactContext()");
  ReactMarker.logMarker(PRE_SETUP_REACT_CONTEXT_END);
  ReactMarker.logMarker(SETUP_REACT_CONTEXT_START);
  Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "setupReactContext");
  synchronized (mReactContextLock) {
    mCurrentReactContext = Assertions.assertNotNull(reactContext);
  }
  CatalystInstance catalystInstance =
    Assertions.assertNotNull(reactContext.getCatalystInstance());

  catalystInstance.initialize();
  mDevSupportManager.onNewReactContextCreated(reactContext);
  mMemoryPressureRouter.addMemoryPressureListener(catalystInstance);
  moveReactContextToCurrentLifecycleState();

  ReactMarker.logMarker(ATTACH_MEASURED_ROOT_VIEWS_START);
  synchronized (mAttachedRootViews) {
    for (ReactRootView rootView : mAttachedRootViews) {
      attachRootViewToInstance(rootView);
    }
  }
  ReactMarker.logMarker(ATTACH_MEASURED_ROOT_VIEWS_END);

  ReactInstanceEventListener[] listeners =
    new ReactInstanceEventListener[mReactInstanceEventListeners.size()];
  final ReactInstanceEventListener[] finalListeners =
      mReactInstanceEventListeners.toArray(listeners);

  UiThreadUtil.runOnUiThread(
      new Runnable() {
        @Override
        public void run() {
          for (ReactInstanceEventListener listener : finalListeners) {
            listener.onReactContextInitialized(reactContext);
          }
        }
      });
  Systrace.endSection(TRACE_TAG_REACT_JAVA_BRIDGE);
  ReactMarker.logMarker(SETUP_REACT_CONTEXT_END);
  reactContext.runOnJSQueueThread(
      new Runnable() {
        @Override
        public void run() {
          Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
        }
      });
  reactContext.runOnNativeModulesQueueThread(
      new Runnable() {
        @Override
        public void run() {
          Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
        }
      });
}
 
源代码19 项目: react-native-GPay   文件: ReactInstanceManager.java
/**
 * @return instance of {@link ReactContext} configured a {@link CatalystInstance} set
 */
private ReactApplicationContext createReactContext(
    JavaScriptExecutor jsExecutor,
    JSBundleLoader jsBundleLoader) {
  Log.d(ReactConstants.TAG, "ReactInstanceManager.createReactContext()");
  ReactMarker.logMarker(CREATE_REACT_CONTEXT_START, jsExecutor.getName());
  final ReactApplicationContext reactContext = new ReactApplicationContext(mApplicationContext);

  NativeModuleCallExceptionHandler exceptionHandler = mNativeModuleCallExceptionHandler != null
      ? mNativeModuleCallExceptionHandler
      : mDevSupportManager;
  reactContext.setNativeModuleCallExceptionHandler(exceptionHandler);

  NativeModuleRegistry nativeModuleRegistry = processPackages(reactContext, mPackages, false);

  CatalystInstanceImpl.Builder catalystInstanceBuilder = new CatalystInstanceImpl.Builder()
    .setReactQueueConfigurationSpec(ReactQueueConfigurationSpec.createDefault())
    .setJSExecutor(jsExecutor)
    .setRegistry(nativeModuleRegistry)
    .setJSBundleLoader(jsBundleLoader)
    .setNativeModuleCallExceptionHandler(exceptionHandler);

  ReactMarker.logMarker(CREATE_CATALYST_INSTANCE_START);
  // CREATE_CATALYST_INSTANCE_END is in JSCExecutor.cpp
  Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "createCatalystInstance");
  final CatalystInstance catalystInstance;
  try {
    catalystInstance = catalystInstanceBuilder.build();
  } finally {
    Systrace.endSection(TRACE_TAG_REACT_JAVA_BRIDGE);
    ReactMarker.logMarker(CREATE_CATALYST_INSTANCE_END);
  }
  if (mJSIModulePackage != null) {
    catalystInstance.addJSIModules(mJSIModulePackage
      .getJSIModules(reactContext, catalystInstance.getJavaScriptContextHolder()));
  }

  if (mBridgeIdleDebugListener != null) {
    catalystInstance.addBridgeIdleDebugListener(mBridgeIdleDebugListener);
  }
  if (Systrace.isTracing(TRACE_TAG_REACT_APPS | TRACE_TAG_REACT_JS_VM_CALLS)) {
    catalystInstance.setGlobalVariable("__RCTProfileIsProfiling", "true");
  }
  ReactMarker.logMarker(ReactMarkerConstants.PRE_RUN_JS_BUNDLE_START);
  catalystInstance.runJSBundle();
  reactContext.initializeWithInstance(catalystInstance);

  return reactContext;
}
 
public void initializeWithInstance(CatalystInstance instance) {
  mInstance = instance;
  mBridgeIdleSignaler = new ReactBridgeIdleSignaler();
  mInstance.addBridgeIdleDebugListener(mBridgeIdleSignaler);
  getContext().initializeWithInstance(mInstance);
}
 
源代码21 项目: react-native-GPay   文件: ReactTestFactory.java
CatalystInstance build(); 
 类方法
 同包方法