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() {
callEntity(DoricConstant.DORIC_ENTITY_DESTROY);
DoricContextManager.getInstance().destroyContext(this).setCallback(new AsyncResult.Callback<Boolean>() {
getDriver().asyncCall(new Callable<Object>() {
@Override
public void onResult(Boolean result) {
public Object call() {
for (DoricJavaPlugin javaPlugin : mPluginMap.values()) {
javaPlugin.onTearDown();
}
mPluginMap.clear();
return null;
}
@Override
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);
}
});
}, ThreadMode.UI);
DoricContextManager.getInstance().destroyContext(this);
}
public DoricJavaPlugin obtainPlugin(DoricMetaInfo<DoricJavaPlugin> doricMetaInfo) {

View File

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

View File

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