feat:call NativeView's method on UI thread
This commit is contained in:
parent
99c994b11b
commit
d123baa5f4
@ -114,7 +114,6 @@ public class ShaderPlugin extends DoricJavaPlugin {
|
||||
name);
|
||||
doricPromise.reject(new JavaValue(errMsg));
|
||||
} else {
|
||||
DoricMethod doricMethod = method.getAnnotation(DoricMethod.class);
|
||||
Callable<JavaValue> callable = new Callable<JavaValue>() {
|
||||
@Override
|
||||
public JavaValue call() throws Exception {
|
||||
@ -134,7 +133,7 @@ public class ShaderPlugin extends DoricJavaPlugin {
|
||||
}
|
||||
};
|
||||
AsyncResult<JavaValue> asyncResult = getDoricContext().getDriver()
|
||||
.asyncCall(callable, doricMethod == null ? ThreadMode.INDEPENDENT : doricMethod.thread());
|
||||
.asyncCall(callable, ThreadMode.UI);
|
||||
asyncResult.setCallback(new AsyncResult.Callback<JavaValue>() {
|
||||
@Override
|
||||
public void onResult(JavaValue result) {
|
||||
|
@ -100,22 +100,14 @@ - (id)findClass:(Class)clz target:(id)target method:(NSString *)name promise:(Do
|
||||
DoricLog(@"CallNative Error:%@", exception.reason);
|
||||
}
|
||||
};
|
||||
|
||||
const char *retType = methodSignature.methodReturnType;
|
||||
if (!strcmp(retType, @encode(void))) {
|
||||
ret = nil;
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block);
|
||||
} else if (!strcmp(retType, @encode(id))) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
void *retValue;
|
||||
block();
|
||||
[invocation getReturnValue:&retValue];
|
||||
id returnValue = (__bridge id) retValue;
|
||||
[promise resolve:returnValue];
|
||||
} else {
|
||||
DoricLog(@"Command Error:%@", @"Must return object type");
|
||||
ret = nil;
|
||||
[promise reject:@"Command: Must return object type"];
|
||||
}
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -152,15 +152,19 @@ - (void)callItem:(NSUInteger)position height:(CGFloat)height {
|
||||
}
|
||||
|
||||
- (DoricViewNode *)subNodeWithViewId:(NSString *)viewId {
|
||||
for (UITableViewCell *tableViewCell in self.view.visibleCells) {
|
||||
if ([tableViewCell isKindOfClass:[DoricTableViewCell class]]) {
|
||||
DoricListItemNode *node = ((DoricTableViewCell *) tableViewCell).doricListItemNode;
|
||||
if ([viewId isEqualToString:node.viewId]) {
|
||||
return node;
|
||||
__block DoricViewNode *ret = nil;
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
for (UITableViewCell *tableViewCell in self.view.visibleCells) {
|
||||
if ([tableViewCell isKindOfClass:[DoricTableViewCell class]]) {
|
||||
DoricListItemNode *node = ((DoricTableViewCell *) tableViewCell).doricListItemNode;
|
||||
if ([viewId isEqualToString:node.viewId]) {
|
||||
ret = node;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
@end
|
||||
|
Reference in New Issue
Block a user