【问题标题】:How to stop ui background thread on blackberry如何停止黑莓上的ui后台线程
【发布时间】:2011-09-23 13:53:38
【问题描述】:

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

当我单击按钮时,我在获取图像后从服务器获取图像 url。

我在同一屏幕上的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 上的图像并重新加载从第二个按钮获取的图像。

它工作正常。

但我的问题是当我连续单击按钮二、三、四时,它会一一加载。我只需要最后按下按钮的图像。

【问题讨论】:

    标签: blackberry


    【解决方案1】:

    像这样..

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多