我想从互联网流呈现位图图像。每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);
但这不起作用。
答案 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。您应该使用runOnUiThread
或Handler
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)
。