我知道,关于线程的问题并不缺乏,但我似乎找不到线程执行 http 工作然后返回更新 UI 的“完整”示例。
我基本上在应用程序启动时调用一些网络服务。我显然不想卡住 UI,所以我想使用单独的线程,对吧?我在网上找到了很多关于如何获取新线程来执行某些任务的示例。但我还没有找到一个可以展示如何在线程任务完成时实际更新 UI 的方法。
我如何知道 Web 服务线程何时完成?有回调方法吗?我可以通过此回调方法访问 UI(如果存在)吗?
编辑:(这是一些代码)
//The activate method is called whenever my application gains focus.
public void activate(){
DoSomething wsThread = new DoSomething();
wsThread.start();
}
public void wsCallBack()
{
myTabScreen.add(new ButtonField("Callback called"));
}
public class DoSomething extends Thread
{
public void run()
{
try
{
wsCallBack();
}
catch(Exception e)
{
}
}
}
非常简单。但它永远不会创建按钮。
有什么想法吗?
非常感谢。
最佳答案
您可以设置一个“回调”系统,以便在线程完成时通知 UI。有一个扩展 Thread 的类,并向其传递最终应调用的类的引用。如果您有需要通知的此类类的列表,请在 Thread 实现上创建一个 Vector 来保存它们。覆盖 run 函数,在完成所需的所有操作后,只需调用 UI 类上的方法(如果需要,则迭代向量)。所以你的类可能看起来像:
public class commThread extends Thread{
MyUIClass callbackObj;
public commThread(MyUIClass myUiClass){
callbackObj = myUiClass;
}
public void run(){
//do stuff
callbackObj.callback();
}
}
和你的 UI 类:
public MyUIClass{
public void callback(){
//refresh the UI
}
}
当然,如果您有多个线程同时运行并调用同一个 UI 对象,请确保同步回调方法。
希望这有帮助!
关于multithreading - 如何在 Web 服务调用线程完成后更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8581375/