Android呈现流式图像

时间:2013-06-19 08:28:55

标签: android streaming

我想从互联网流呈现位图图像。每500毫秒我得到一个新的图像,我想向用户呈现这个图像。做这个的最好方式是什么?我可以使用图像视图并每500毫秒变换一次图像吗?

我试图在这样的计时器任务中执行此操作:

    timer.schedule(new TimerTask() {
        public void run() {
            if(flag){
                Bitmap bmp = null;
                Log.i(APPID, "New frame");
                try {
                    bmp = session.getImage();
                    setImage(bmp);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                timer.cancel();
            }
        }
    }, 500, 500);

但这不起作用。

2 个答案:

答案 0 :(得分:1)

从UI /主线程以外的线程更新UI将失败,因为Android不允许它。尝试使用Handler将消息发布回UI线程。你可以这样做。

final Handler h = new Handler();
timer.schedule(new TimerTask() {
    public void run() {
        if(flag){
            h.post(new Runnable() {
                public void run() {
                    Bitmap bmp = null;
                    Log.i(APPID, "New frame");
                    try {
                       bmp = session.getImage();
                       setImage(bmp);   
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
            }
        } else {
            timer.cancel();
        }
    }
}, 500, 500);

答案 1 :(得分:1)

计时器任务在不同的线程上运行。你需要在ui线程上更新ui。您应该使用runOnUiThreadHandler

 runOnUiThread(new Runnable() //run on ui threa
 {
         public void run() 
         { 
                // update ui here   
         }
  });

处理程序

   Handler m_handler;
   Runnable m_handlerTask ; 

   m_handler= new Handler();  
   m_handlerTask = new Runnable()
           {
               @Override 
               public void run() { 
                    // do soemthing 

                    m_handler.postDelayed(m_handlerTask, 1000);    
                            // change 1000 to whatever you want 

               }
          };
          m_handlerTask.run(); 

如果您想要取消,请拨打此m_handler.removeCallbacks(m_handlerTask)