随缘_多线线程操作开源代码
作者:随缘QQ:874334395
QQ群:476412098
package com.e4a.runtime.components.impl.android.随缘_多线程类库;
import android.os.Handler;
import android.os.Looper;
import com.e4a.runtime.components.ComponentContainer;
import com.e4a.runtime.components.impl.ComponentImpl;
import com.e4a.runtime.events.EventDispatcher;
import com.e4a.runtime.variants.Variant;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class 随缘_多线程Impl extends ComponentImpl implements 随缘_多线程 {
public final static Map<ComponentContainer, List<Method>> COMPONENT_LIST_MAP = new HashMap<>();
private ComponentContainer container;
private Handler handler;
public 随缘_多线程Impl(ComponentContainer container) {
super(container);
this.container = container;
List<Method> methodList = COMPONENT_LIST_MAP.get(container);
if (methodList == null) {
methodList = new ArrayList<>();
for (Method method : container.getClass().getMethods()) {
if (method.getReturnType().equals(Void.TYPE)) {
methodList.add(method);
}
}
COMPONENT_LIST_MAP.put(container, methodList);
}
handler = new Handler(Looper.getMainLooper());
}
@Override
public long 启动线程(String 欲被调用的窗口过程名, Variant[] 欲投递的参数) {
final long id = System.currentTimeMillis();
new Thread() {
@Override
public void run() {
try {
getMethod(欲被调用的窗口过程名).invoke(container, getPostingParameters(欲投递的参数));
} catch (Throwable e) {
e.printStackTrace();
handler.post(() -> 发生错误(id, e.getMessage()));
}
}
}.start();
return id;
}
@Override
public void post主线程(String 欲被调用的窗口过程名, Variant[] 欲投递的参数) {
handler.post(() -> {
try {
getMethod(欲被调用的窗口过程名).invoke(container, getPostingParameters(欲投递的参数));
} catch (Throwable e) {
e.printStackTrace();
}
});
}
private Method getMethod(String methodName) throws NullPointerException {
List<Method> methodList = COMPONENT_LIST_MAP.get(container);
for (Method method : methodList) {
if (method.getName().equals(methodName.trim())) {
return method;
}
}
throw new NullPointerException(String.format("在窗口下找不到_方法名:'%s' ", methodName));
}
private Object[] getPostingParameters(Variant[] variants) {
if (variants == null || variants.length == 0) {
return new Object[]{};
} else {
Object[] objects = new Object;
for (int i = 0; i < variants.length; i++) {
Variant variant = variants;
switch (variant.getType()) {
case 1:
objects = variant.getBoolean();
break;
case 2:
objects = variant.getByte();
break;
case 3:
objects = variant.getShort();
break;
case 4:
objects = variant.getInteger();
break;
case 5:
objects = variant.getLong();
break;
case 6:
objects = variant.getSingle();
break;
case 7:
objects = variant.getDouble();
break;
case 8:
objects = variant.getString();
break;
case 9:
objects = variant.getObject();
break;
case 10:
objects = variant.getArray();
break;
case 11:
objects = variant.getDate();
break;
default:
objects = null;
break;
}
}
return objects;
}
}
@Override
public void 发生错误(long 线程ID, String err) {
EventDispatcher.dispatchEvent(this, "发生错误", 线程ID, err);
}
}
MEILUANYOOONG czwy888 发表于 2022-9-29 08:26
MEILUANYOOONG
关键你这货色能看懂不。 要能看懂这个个.我也就不学E4A啦{:4_108:} 没有例程,没用 {:4_86:} 谢谢分享。
页:
[1]