mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-18 04:13:51 +08:00
Move setBridge: off main thread
Summary: Previously, if a module implemented `setBridge:` we assumed that it needs to be initialised on the main thread. This assumption was not really warranted however, and it was a barrier to deferring module initialization. This diff tweaks the rules so that only modules that override `init` or `constantsToExport**` are assumed to require main thread initialization, and others can be created lazily when they are first used. WARNING: this will be a breaking change to any 3rd party modules that are assuming `setBridge:` is called on the main thread. Those modules should be rewritten to move any code that requires the main thread into `init` or `constantsToExport` instead. `**` We will also be examining whether `constantsToExport` can be done lazily, but for now any module that uses it will still be created eagerly when the bridge starts up. Reviewed By: javache Differential Revision: D3240682 fb-gh-sync-id: 48f309e3158bbccb52141032baf70def3e609371 fbshipit-source-id: 48f309e3158bbccb52141032baf70def3e609371
This commit is contained in:
committed by
Facebook Github Bot 4
parent
55c8158c44
commit
34ec6a91a9
@@ -221,10 +221,16 @@ RCT_EXPORT_MODULE()
|
||||
|
||||
- (void)testCustomSetBridgeModuleInitializedAtBridgeStartup
|
||||
{
|
||||
RUN_RUNLOOP_WHILE(!_customSetBridgeModuleNotificationSent);
|
||||
XCTAssertFalse(_customSetBridgeModuleNotificationSent);
|
||||
|
||||
__block RCTTestCustomSetBridgeModule *module;
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
module = [_bridge moduleForClass:[RCTTestCustomSetBridgeModule class]];
|
||||
});
|
||||
|
||||
RUN_RUNLOOP_WHILE(!module);
|
||||
XCTAssertTrue(_customSetBridgeModuleNotificationSent);
|
||||
RCTTestCustomSetBridgeModule *module = [_bridge moduleForClass:[RCTTestCustomSetBridgeModule class]];
|
||||
XCTAssertTrue(module.setBridgeOnMainThread);
|
||||
XCTAssertFalse(module.setBridgeOnMainThread);
|
||||
XCTAssertEqual(module.bridge, _bridge.batchedBridge);
|
||||
XCTAssertNotNil(module.methodQueue);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user