关于ProgressBar的简单问题

public void onCreate(Bundle savedInstanceState) {
.........
new Thread(new Runnable()
{
public void run()
{
......
handler.post(new Runnable()
{
public void run()
{

                    progressBar.setVisibility(8)                       }
            });
          //progressBar.setVisibility(8);
         }
     }

}

这是个进度条的demo,最后让进度条消失,为什么一定要用handler.post而不能直接progressBar.setVisibility(8);
如果用直接使用progressBar.setVisibility(8);而不用handler.post则在进度条到达100%处会图片说明

1个回答

 new Thread(new Runnable() //这里起了线程,对于UI界面更新来说,需要在UI线程中,也就是不能再Thread线程中直接更新UI界面
{
public void run() 
{
......
handler.post(new Runnable() //handler.post中执行的操作是在UI线程中的,所以能进行UI更新
{
public void run() 
{
                    progressBar.setVisibility(8)                       }
            });
          //progressBar.setVisibility(8);
         }
     }
}
yewennuan
yewennuan 回复danielinbiti: 谢谢了
大约 5 年之前 回复
yewennuan
yewennuan 谢谢了
大约 5 年之前 回复
danielinbiti
danielinbiti 回复yewennuan: progressBar是例外的一个,在内部是有一个判断的,如果不是UI线程会创建一个Runnable放到UI线程中,如果在UI线程中,则会直接更新。所以效率上,最好是放在UI线程中
大约 5 年之前 回复
yewennuan
yewennuan 在 new Thread(new Runnable() )的run()里面还有个/* handler.post(new Runnable() { public void run() { progressBar.setProgress(progressStatus); } });*/ progressBar.setProgress(progressStatus);这里直接用 progressBar.setProgress(progressStatus);却没有任何问题
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问