RCTSurface: Stopping the app on surface object deallocation
Reviewed By: rsnara Differential Revision: D6431628 fbshipit-source-id: 2b3fd39d77a1108516f00727dd21f648c2bf41b1
This commit is contained in:
Родитель
43b2509320
Коммит
ba6075120a
|
@ -85,7 +85,7 @@
|
|||
_stage = _stage | RCTSurfaceStageBridgeDidLoad;
|
||||
}
|
||||
|
||||
[self _registerRootViewTag];
|
||||
[self _registerRootView];
|
||||
[self _run];
|
||||
}
|
||||
|
||||
|
@ -94,6 +94,7 @@
|
|||
|
||||
- (void)dealloc
|
||||
{
|
||||
[self _stop];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
|
@ -297,7 +298,18 @@
|
|||
[self _setStage:RCTSurfaceStageSurfaceDidRun];
|
||||
}
|
||||
|
||||
- (void)_registerRootViewTag
|
||||
- (void)_stop
|
||||
{
|
||||
RCTBridge *batchedBridge = self._batchedBridge;
|
||||
[batchedBridge enqueueJSCall:@"AppRegistry"
|
||||
method:@"unmountApplicationComponentAtRootTag"
|
||||
args:@[self->_rootViewTag]
|
||||
completion:NULL];
|
||||
|
||||
[self _setStage:RCTSurfaceStageSurfaceDidStop];
|
||||
}
|
||||
|
||||
- (void)_registerRootView
|
||||
{
|
||||
RCTBridge *batchedBridge;
|
||||
CGSize minimumSize;
|
||||
|
|
|
@ -22,7 +22,7 @@ typedef NS_OPTIONS(NSInteger, RCTSurfaceStage) {
|
|||
RCTSurfaceStageSurfaceDidInitialRendering = 1 << 4, // UIManager created the first shadow views
|
||||
RCTSurfaceStageSurfaceDidInitialLayout = 1 << 5, // UIManager completed the first layout pass
|
||||
RCTSurfaceStageSurfaceDidInitialMounting = 1 << 6, // UIManager completed the first mounting pass
|
||||
RCTSurfaceStageSurfaceDidInvalidate = 1 << 7, // Surface received `invalidate` message
|
||||
RCTSurfaceStageSurfaceDidStop = 1 << 7, // Surface stopped
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
BOOL RCTSurfaceStageIsRunning(RCTSurfaceStage stage) {
|
||||
return
|
||||
(stage & RCTSurfaceStageSurfaceDidInitialLayout) &&
|
||||
!(stage & RCTSurfaceStageSurfaceDidInvalidate);
|
||||
!(stage & RCTSurfaceStageSurfaceDidStop);
|
||||
}
|
||||
|
||||
BOOL RCTSurfaceStageIsPreparing(RCTSurfaceStage stage) {
|
||||
return
|
||||
!(stage & RCTSurfaceStageSurfaceDidInitialLayout) &&
|
||||
!(stage & RCTSurfaceStageSurfaceDidInvalidate);
|
||||
!(stage & RCTSurfaceStageSurfaceDidStop);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче