feat:remove Context instance before js destory

This commit is contained in:
pengfei.zhou 2020-02-27 13:40:02 +08:00 committed by osborn
parent b1cd69437a
commit 1a6b730146
3 changed files with 14 additions and 29 deletions

View File

@ -162,31 +162,17 @@ public class DoricContext {
public void teardown() { public void teardown() {
callEntity(DoricConstant.DORIC_ENTITY_DESTROY); callEntity(DoricConstant.DORIC_ENTITY_DESTROY);
DoricContextManager.getInstance().destroyContext(this).setCallback(new AsyncResult.Callback<Boolean>() { getDriver().asyncCall(new Callable<Object>() {
@Override @Override
public void onResult(Boolean result) { public Object call() {
for (DoricJavaPlugin javaPlugin : mPluginMap.values()) {
javaPlugin.onTearDown();
}
mPluginMap.clear();
return null;
} }
}, ThreadMode.UI);
@Override DoricContextManager.getInstance().destroyContext(this);
public void onError(Throwable t) {
}
@Override
public void onFinish() {
getDriver().asyncCall(new Callable<Object>() {
@Override
public Object call() {
for (DoricJavaPlugin javaPlugin : mPluginMap.values()) {
javaPlugin.onTearDown();
}
mPluginMap.clear();
return null;
}
}, ThreadMode.UI);
}
});
} }
public DoricJavaPlugin obtainPlugin(DoricMetaInfo<DoricJavaPlugin> doricMetaInfo) { public DoricJavaPlugin obtainPlugin(DoricMetaInfo<DoricJavaPlugin> doricMetaInfo) {

View File

@ -57,6 +57,7 @@ public class DoricContextManager {
} }
AsyncResult<Boolean> destroyContext(final DoricContext context) { AsyncResult<Boolean> destroyContext(final DoricContext context) {
doricContextMap.remove(context.getContextId());
final AsyncResult<Boolean> result = new AsyncResult<>(); final AsyncResult<Boolean> result = new AsyncResult<>();
context.getDriver().destroyContext(context.getContextId()).setCallback(new AsyncResult.Callback<Boolean>() { context.getDriver().destroyContext(context.getContextId()).setCallback(new AsyncResult.Callback<Boolean>() {
@Override @Override
@ -71,7 +72,6 @@ public class DoricContextManager {
@Override @Override
public void onFinish() { public void onFinish() {
doricContextMap.remove(context.getContextId());
} }
}); });
return result; return result;

View File

@ -70,11 +70,10 @@ - (DoricContext *)getContext:(NSString *)contextId {
- (void)destroyContext:(DoricContext *)context { - (void)destroyContext:(DoricContext *)context {
NSString *contextId = context.contextId; NSString *contextId = context.contextId;
[context.driver destroyContext:contextId].finishCallback = ^{ dispatch_sync(self.mapQueue, ^() {
dispatch_sync(self.mapQueue, ^() { [self.doricContextMap removeObjectForKey:contextId];
[self.doricContextMap removeObjectForKey:contextId]; });
}); [context.driver destroyContext:contextId];
};
} }
- (NSArray *)aliveContexts { - (NSArray *)aliveContexts {