package mars.helloworld;import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;public class HelloworldActivity extends Activity {
    /** Called when the activity is first created. */
private Button bt;
private ProgressDialog pDialog;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Handler handler1=new Handler();
        final Handler handler2=new Handler();
        final Runnable Thread1=new Runnable()
        { @Override
public void run() {
// TODO Auto-generated method stub
for(int i=10000;i>=0;i--)
{
System.out.println("i"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
        
        };
        final Runnable Thread2=new Runnable()
        { @Override
public void run() {
// TODO Auto-generated method stub
for(int y=1000;y>=0;y--)
{
System.out.println("y"+y);

}
}
        
        };
        bt=(Button)findViewById(R.id.bt1);
        bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub    
handler1.post(Thread1);
        handler2.post(Thread2);
}
});        
        
    }
}
上面的代码定义了两个线程,为什么两个线程不是异步的,要Thread1执行完了Thread2才执行,而且还会卡UI,搞不懂,求教。

解决方案 »

  1.   

    你这样只有一个线程,都是在ui线程运行的,所以你觉得卡UI了,新开线程必须调用它的start方法,不然它只是单纯的在主线程执行run方法
      

  2.   

    handler1.post(Thread1);你可以看下源码,这个操作在执行的时候,只是调用了Runnable.run()方法,并没有创建线程啊。如果想异步,就要在在run()方法里面,再new线程进行操作。 
      

  3.   

    runable不是thread, thread要自己创建,并明确start才是。 runable只是一个执行片段, 如果类比的话,可以类比成c/c++中的回调函数指针, 比较类似。
      

  4.   

    在run方法的开始和结束加上Looper.prepare()和Looper.loop()
      

  5.   

    handler把它丢到ui线程里面去了,并没有开新线程