如何在黑莓上停止ui背景线程

时间:2011-09-23 13:53:39

标签: blackberry

我在horizo​​ntalFieldManger中添加了5个按钮。

当我点击按钮后,我得到图像后,我从服务器获取图像网址。

我将图像加载到同一屏幕上的verticalfiedlManager中。

我的代码是。

    Thread loadImageThread = new Thread()
    {
        public void run()
        {
            if(Imagethread)
            {
                try 
                {
                    final Vector url = new Vector();
                    HttpConnections httpConnection = new HttpConnections(path+suffix);
                    DataInputStream _inputStream = new DataInputStream(httpConnection.StreamConnection());
                    getXMLObjects(_inputStream);
                    _inputStream.close();
                    UiApplication.getUiApplication().invokeLater(new Runnable() 
                    {
                        public void run() 
                        {
                            feedListItem = ListFeedHandler.item;
                            int Size = feedListItem.size();
                            for (int i = 0; i < Size; i++) 
                            {
                                url.addElement(newsBean.getURL());
                            }
                        }
                    });

                    UiApplication.getUiApplication().invokeLater(new Runnable()
                    {
                        public void run()
                        {
                            loadPicture(url);
                        }
                    });
                } 
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
    };
    loadImageThread.start();

在loadPicture(url)方法中。我在verticalfiledmager上获取图像并加载。

当我点击第二个按钮时,我删除了所有在verticafiledmanager上成像并重新加载从第二个按钮获取的内容。

工作正常。

但我的问题是当我连续点击两个,三个,四个按钮时,它的负载是一个接一个。我只需要最后按下按钮的图像。

1 个答案:

答案 0 :(得分:3)

像这样......

int id = -1; 
...
if(id != -1) {
  UiApplication.getUiApplication().cancelInvokeLater(id);
  id = -1;
}
id =  UiApplication.getUiApplication().invokeLater(new Runnable() 
 {
 public void run() { 
  .....
  id = -1; //when invokeLater task finished normally
}