Отображать изображения с веб-адреса в многопоточности - PullRequest
1 голос
/ 12 сентября 2011

У меня 52 изображения, которые приходят с веб-URL. Я хочу показать эти изображения в многопоточном процессе.

Может ли кто-нибудь подсказать мне, как это возможно ?????

Я реализую код ниже, но он не работает.

    for (int i = 0; i <total_data; i++) {

        GetBitmapClass getBitmapClass=new GetBitmapClass(i, image_path[i]);

        if(Thread.activeCount()>14)
        {
            //System.out.println("Size "+pending_thread.size());
            pending_thread.addElement(getBitmapClass);

        }else
        {

            getBitmapClass.start();
        }

}


        //Thread class




        class GetBitmapClass extends Thread
        {
            int index;
            String url;

            public GetBitmapClass(int index,String url)
            {
                this.index=index;
                this.url=url;

            }

            public void run() {
               // TODO Auto-generated method stub



                StreamConnection stream = null;
                InputStream in = null;


                if(Thread.activeCount()>14)
                {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }




                System.out.println("Thread "+index+" Started \n count= "+Thread.activeCount());

                try {
                    //stream = (StreamConnection) Connector.open(url+";deviceside=true;");
                    stream = (StreamConnection) Connector.open(url+";interface=wifi");
                    in = stream.openInputStream();
                } 
                catch (Exception e) {

                }

                byte[] data = new byte[1024];
                try {
                    DataBuffer db = new DataBuffer();
                    int chunk = 0;
                    while (-1 != (chunk = in.read(data))) {
                        db.write(data, 0, chunk);
                    }
                    in.close();

                    data = db.getArray();
                } catch (Exception e) {
                }

                EncodedImage jpegPic = EncodedImage.createEncodedImage(data, 0,
                        data.length);
                        Bitmap bm = jpegPic.getBitmap();

                        bmp[index]=bm;


                    UiApplication.getUiApplication().invokeLater (new Runnable() {
                        public void run() 
                        {   

                            bitmapFields[index].setBitmap(bmp[index]);
                            gridFieldManager.add(bitmapFields[index]);

                            if((pending_thread.size()>0))
                                {
                                    GetBitmapClass thread1=(GetBitmapClass)pending_thread.elementAt(0);
                                    try
                                    {
                                        thread1.start();
                                        pending_thread.removeElementAt(0);
                                    }
                                    catch (Exception e) {
                                        // TODO: handle exception
                                        System.out.print("Thread Not Started");
                                    }

                                    System.out.println("Size Reduce"+pending_thread.size());
                                }
                            System.out.print("Thread Completed"+index);
                        }
                    });

        } 

}

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Я забыл закрыть потоковое соединение. необходимо закрыть соединение с потоком.

0 голосов
/ 12 сентября 2011

Попытка запустить много потоков одновременно - плохая идея для BB. Это не рабочий стол. Обычно вам следует избегать запуска более одного тяжелого фонового потока, в противном случае вы рискуете замедлить ваш основной поток пользовательского интерфейса до уровня, когда пользователи прекратят использовать ваше приложение и назовут его «вялым». Ваши потоки тяжелы - они изменяют размер изображений, создают сети, манипулируют растровыми изображениями. Чтобы это исправить, вам нужно создать список Runnable задач и выполнить их в единственном фоновом потоке. Исходя из моего опыта, выполнение задач на BB более эффективно, чем попытка запустить их одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...