关于线程的问题并不缺乏,我知道,但我似乎无法找到一个线程做完http工作然后回来更新UI的“完整”示例。
我基本上会在应用启动时调用一些Web服务。我显然不想冻结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)
{
}
}
}
很简单。但它永远不会创建按钮。
有什么想法吗?
非常感谢。
答案 0 :(得分:3)
您可以设置“回调”系统,以在线程完成时通知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对象,请确保同步回调方法。
希望这有帮助!