我通过子线程向UI线程发送message来更新进度条,子线程用了一个for循环,每循环一次都是向UI线程
发送消息,然后UI线程接受到消息后,就更新progressbar。
但是,实际上系统并不是按我想的去执行(子线程发消息-->UI处理-->子线程发消息-->UI处理-->....)
而是子线程发消息-->子线程发消息--->...-->UI处理-->UI处理-->UI处理-->...
而且,UI每次处理的消息,都是最后一个消息,明明我是发送了几个不同的消息的。
如果我在子线程的循环中加个Thread.sleep(100),就是子线程发消息-->UI处理-->子线程发消息-->UI处理-->....
好奇怪,求大侠指教!
UI处理的代码:
子线程的代码:
发送消息,然后UI线程接受到消息后,就更新progressbar。
但是,实际上系统并不是按我想的去执行(子线程发消息-->UI处理-->子线程发消息-->UI处理-->....)
而是子线程发消息-->子线程发消息--->...-->UI处理-->UI处理-->UI处理-->...
而且,UI每次处理的消息,都是最后一个消息,明明我是发送了几个不同的消息的。
如果我在子线程的循环中加个Thread.sleep(100),就是子线程发消息-->UI处理-->子线程发消息-->UI处理-->....
好奇怪,求大侠指教!
UI处理的代码:
handler=new Handler()
{
public void handleMessage(Message msg)
{
try{
switch(msg.what)
{
case 3://
int i=msg.getData().getInt("i");
progresabar1.setProgress(i);/更新进度条
break;
}
}catch(Exception e)
{
}
}
};
子线程的代码:
public void run() {
Looper.prepare();//开始消息循环qk
try{
myhandler=new Handler()
{
Bundle bd=new Bundle();
Message mg;
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 3:
for(int i=3;i<=15;i++){
bd.clear();
mg=null;
mg= superHd.obtainMessage();
bd.putInt("i",i);
mg.setData(bd);
mg.what=3;
mg.arg1=msg.arg1;
superHd.sendMessage(mg);//调试发现,在没有sleep的时候,这边是连续发送了13个消息,而且接受的UI现在是在这边for循环完
//后在处理消息,而且是连续处理了13个,但是奇怪的是,这13个mg,为什么都相同呢?
Log.d("dd","fasong:"+String.valueOf(i));
/*
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
}
break;
}
// process incoming messages here
}
};