Android 重定向(委托指针)



我想从后台线程循环中调用不同的代码(回调(,并使用该后台线程来执行工作。它类似于 C# 中的委托。

public class test {
private boolean keepRunning;
private boolean messageReady;
private MyClass myClass;
void LongBackgroundWork(){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (keepRunning) {
if (messageReady){
myClass.callback();  // call different methods here 
//   to be decided at runtime and run on this worker thread
}
}
}
});
thread.start();
}
}

我想使用后台线程而不是 UI 线程。我想从 myClass 中设置一个回调来选择调用的代码。在C#中,如何做Java很容易。 我在Java方面没有太多经验,也不明白使用什么机制。我应该使用处理程序吗?处理程序是否可以在后台线程上运行代码?

我敢打赌,你想要一个发生事件或某些事件的模式,你需要在某处启动一个代码块。

可以帮助您的模式可能是观察维基并启动事件。如果您愿意,也可以在此处查看此SO问题:Java中的委托与回调

就您而言,我认为您希望有人处理消息准备就绪时您必须做的事情的责任。因此,您正在寻找的是一旦事件被读取(消息准备就绪(来执行操作的人。

例如,ClassFoo是您的侦听器容器,或者也称为观察者,它将收到任何事件的通知。您可以在此处列出对某个对象的回调列表,该对象负责您的逻辑执行下一步需要执行的操作。

然后,您将拥有一个可观察对象或类,该对象或类将在收到通知时实现某些逻辑。然后,您可以通过实现所需的回调函数让各种类对象执行必要的逻辑。

例:

// Observer
public class Foo {
// List of objects that implement Callbacks interface
private List<Callbacks> mList;
public Foo() {
// Initialize here
}
public void addListener(Callbacks cb) {
mList.add(cb);
}
public void notifyListeners() {
for ( Callback cb : mList) {
cb.onCallback();
}
}
// Public interface to be implemented by users
public interface Callback {
void onCallback();
}
}

然后,只需让一个类实现此对象,如果您愿意,可以传递它。

// Bar implements Foo.Callback interface
public class Bar implements Foo.Callback {
public class Bar() {}
@Override
public void onCallback() {
// Perform logic here
}
}

最后,在代码中,您只需创建 Foo 对象,添加一个侦听器,并在需要触发事件时通知他们。

如果我理解正确,你不能在 UI 线程上执行此操作,基本上当 android 看到这样的线程时,它会期望它是一个很长的操作,但是你可以通过 AsyncTask 或处理程序调用它

你可以做这样的东西

private class MyAsyncTask extends AsyncTask<Void,Void,Void>{
protected Void doInBackground() {
MyClass myClass=new MyClass();
myClass.LongBackgroundWork();
}
return totalSize;
}
}

这就是 yo 调用您的线程的方式,否则您必须使用 Handler 代替

Handler handler=new Handler();
handler.post(new Runnable(){
MyClass myClass=new MyClass();
myClass.LongBackgroundWork();
})

最新更新