让我们说很多功能都使用了这个类test.MyClass
中的方法,但它非常慢,我想在JNI中编码以期改善时间...
有没有办法替换test.MyClass
以便不需要更改库,但是从现在开始,库中的代码将使用新的.Skip(0), .Take(10);
.Skip(10), .Take(10);
.Skip(20), .Take(10);
<...>
和某些方法的本机实现?这是经典的#34; PC很好,但Android的时机是废话&#34;问题
答案 0 :(得分:-1)
只需在与要覆盖的包中相同的包/层次结构中创建public class Observable {
public interface Observer {
void notify(List<Object> results);
}
private HandlerThread handlerThread;
private List<Object> results = new ArrayList<>();
private final Map<Observer, ObserverWrapper> observers = new HashMap<>();
private void working() {
//Critial section...
//modifying results list...
synchronized (observers) {
for (ObserverWrapper wrapper : observers.values()) {
wrapper.notify(results);
}
}
}
public void register(Observer observer, Handler handler) {
synchronized (observers) {
//Create observer wrapper and add to map here...
}
}
public void unregister(Observer observer) {
synchronized (observers) {
//Remove observer from the map...
}
}
private static final class ObserverWrapper {
private final Observer observer;
private final Handler handler;
public ObserverWrapper(Observer observer, Handler handler) {
this.observer = observer;
this.handler = handler;
}
public void notify(final List<Object> results) {
//The observable thread
handler.post(new Runnable() {
void run() {
//The observer thread
//Critical section...
observer.notify(results);
}
});
}
}
}
即可。 test.MyClass
应首先加载您的实现,如果它尝试从其他库加载该实现,则加载将失败,因为类路径中只能有一个已加载的实例。