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,19 +162,6 @@ 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>() {
@Override
public void onResult(Boolean result) {
}
@Override
public void onError(Throwable t) {
}
@Override
public void onFinish() {
getDriver().asyncCall(new Callable<Object>() { getDriver().asyncCall(new Callable<Object>() {
@Override @Override
public Object call() { public Object call() {
@ -185,8 +172,7 @@ public class DoricContext {
return null; return null;
} }
}, ThreadMode.UI); }, ThreadMode.UI);
} DoricContextManager.getInstance().destroyContext(this);
});
} }
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 {