multithreading - 如何在 Web 服务调用线程完成后更新 UI

标签 multithreading blackberry

我知道,关于线程的问题并不缺乏,但我似乎找不到线程执行 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/

相关文章:

networking - 为什么黑莓应用程序在没有 BIS 的情况下无法在北美以外的地方进行网络 i/o?

java - 等待异步回调的线程

c++ - 没有 Windows API 调用的 Windows 当前 ThreadID

java - 是否存在线程安全的 statsd 客户端?

Blackberry JDE v5.0 开发中的 java.util.Arrays

iphone - iPhone、Android 和黑莓的移动开发

Java 并发计数器未正确清理

multithreading - TParallel.For : Store values in a TList while they are calculated in a TParallel. For 循环

javascript - touch 相当于 focus() 方法?

user-interface - BlackBerry - 可用屏幕的高度,不包括横幅和标题字段