在onCreate里面:
((Button) findViewById(R.id.bt2)).setOnClickListener(new Button.OnClickListener(){
        private ProgressDialog dlg;
        
@Override
public void onClick(View v) {
dlg = new ProgressDialog(eg_04_24.this);
dlg.setProgressStyle(...);
dlg....;
dlg.show(); new Thread() {
int count = 0;
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(count++ < 100) {
dlg.setProgress(count);
Thread.sleep(100);
}
}
catch(InterruptedException e) {

}
}
}.start();
}
});问题有:
一、在工作线程中不可操作主线程的UI,那么上面的dlg.setProgress(count);算不算?
二、听说在工作线程中操作主线程UI,会有异常,可是上面并没有异常?
三、谁能给“在工作线程中操作主线程UI”下个定义,比如上面的setProgress是操作UI吗?一般性判定原则是什么?
四、难道“在工作线程中操作主线程非UI”就可以吗?我觉得也可能有问题啊。在windows下面,只要是多线程访问数据,就会有问题,为什么在android下面,就只有UI操作才有问题呢?
记得hashtable和hashmap的区别就是在多线程互斥上面,那么说明多线程访问数据也是存在互斥问题的。
既然多线程访问任何东西都有问题,那么又何必强调,在线程中操作主线程UI的问题呢?

解决方案 »

  1.   

    setProgress只是设置位置,不会主动更新子线程中不是一定不能控制UI更新,只不过有的特别的方法更新虽然成功了,但是只是因为系统的问题才更新成功的,并不是正确的方法
      

  2.   

    android的所有的ui控件不是线程安全的,处理时需要用handler配合刷新,
      

  3.   

    最近在解一个UI更新的bug 搞半天没出来
      

  4.   

    android系统UI,如果用户在5S内,或是广播接收器的onReceiver里执行的事情超过了10s,则会弹出“×××应用程序无响应”的窗口,那是因为耗时的操作阻塞了UI线程导致的,所以用Handler可以时时回调来刷新UI界面,具体用法如下:
    1,首先在主线程里做如下声明;
    //生成一个handlerThread类对象
     HandlerThread handlerThread = new HandlerThread("handler_thread");
    //在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();
    handlerThread.start();
    MyHandler myHandler = new MyHandler(handlerThread.getLooper());
    Message msg = myHandler.obtainMessage();
    //将msg发送到目标对象,所谓的目标对象,就是生成该msg对象的handler对象
    msg.sendToTarget();2,然后建立一个继承Handler的MyHandler类:
    class MyHandler extends Handler{
    public MyHandler(){ }
    public MyHandler(Looper looper){
    super(looper);
    }
    @Override
    public void handleMessage(Message msg) {
                            //耗时的复杂操作代码}
      

  5.   

    既然多线程访问任何东西都有问题,那么又何必强调,在线程中操作主线程UI的问题呢?其他数据的访问涉及多线程时一般会对方法添加Synchronized关键字,使其具备线程安全的功能
      

  6.   


      如果添加Synchronized关键字做同步操作的话,那如果需要同时做操作的话,又怎么办喃?
      

  7.   

    linux不是没有线程这个东西么?