异步多线程

android

2013-05-25 13:14



Handler h;

 h =new Handler(){

            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                       if (msg.arg1==2){
                    progressBar1.setProgress((int)progressBar1.getProgress()+1); //设置UI线程
                   }
                
            }
            
 };


接收设置


按钮启动 多线程

    button3.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {

                  Thread tt=new Thread(new Runnable() {
                   @Override
                    public void run() {
                          uu();  执行的代码
                    }
                });
                   tt.start();   //开始执行
            }
  });



protected void uuu() {



for(int l=1;l<=8;l++){

   Thread.sleep(2000);

   Message m2=Message.obtain();

  m2.arg1=2;

  h.sendMessage(m2);

}




}

----------------------------------------------------------------------------------------------



public class m extends Activity {
    h h=new h();
    t t;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.m2);

        t=new t();
        t.start();

   }

class h extends Handler{
    @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.arg1==1){Log.v("2","2");    }
        }
    
    }


    class t extends Thread implements Runnable  {
          @Override
        public void run() {
            super.run();
            Message m =Message.obtain();
            m.arg1=1;
            m.obj="china";
            h.sendMessage(m);
    }

}

---------asyncTask----------------------------------------------------


  ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar);  
  asyncTask.execute(1000); 


public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {  
          
        private TextView textView;  
        private ProgressBar progressBar;  
          
          
        public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) {  
            super();  
            this.textView = textView;  
            this.progressBar = progressBar;  
        }  
      
        //该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置  
        @Override  
        protected void onPreExecute() {  
            textView.setText("开始执行异步线程");  
        }  
      
        /**  
         * 这里的Integer参数对应AsyncTask中的第一个参数   
         * 这里的String返回值对应AsyncTask的第三个参数  
         * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改  
         * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作  
         */  
        @Override  
        protected String doInBackground(Integer... params) {  
         
            int i = 0;  
            for (i = 10; i <= 100; i+=5) {  
                 try {
                    Thread.sleep(1000);
                    Log.v("T", "i"+i);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                publishProgress(i);  
            }  
            return i + params[0].intValue() + "";  
        }  
      
      

        /**  
         * 这里的Intege参数对应AsyncTask中的第二个参数  
         * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行  
         * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作  
         */  
        @Override  
        protected void onProgressUpdate(Integer... values) {  
            int vlaue = values[0];  
            progressBar.setProgress(vlaue);  
        }  
        
        /**  
         * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)  
         * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置  
         */  
        @Override  
        protected void onPostExecute(String result) {  
            textView.setText("异步操作执行结束" + result);  
        }  

      
    }