最近自己在写一些音、视方面的Demo,遇到了如题的问题,起初的代码如下:
new Thread(new runable(){
//更新主线程的一些UI控件属性
textview1.setText("12412"); //无效
});
在Activity线程(主线程)里new therad来更新进度,显示播放时间,发现无法更新,后来才知道原来在线程安全考虑上有非UI线程不能更新UI线程这个机制,解决这个问题我采用的handle的方式来处理的(好像还有其他的方法),代码如下:
//在主线程创建一个类似于侦听消息的handle
Handle handle=new Handle(){
//回调函数,当有消息发送过来时调用,用于线程间通讯
public void handleMessage(Message msg){
//msg.what 自有的what属性,可用来区分不同的操作或者是不同的消息
if(msg.what==1){
//如果是1 do somthing
msg.obj 传递的值
}
}
};
加好Handle以后原来的代码就作出一些修改:
new Thread(new runable(){
//更新主线程的一些UI控件属性
//textview1.setText("12412"); //无效
handle.obtainMessage(1,"00:02"); //构造要传递的消息,假如是:己播放时间
handle.sendMessage(); //给主线程主送消息,触发回调
});