AsyncTask后台线程的简单应用(进度条更新显示)

来源:互联网 发布:淘宝企业店可以贷款吗 编辑:程序博客网 时间:2024/04/29 17:10
1.MainActivity的内容
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.view.Menu;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.ProgressBar;
importandroid.widget.TextView;
 
publicclass MainActivity extendsActivity {
     
    privateTextView textview;
    privateButton button;
    privateProgressBar bar;
     
 
    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findview();
        setview();
    }
    privateOnClickListener beginPro = newOnClickListener() {
         
        @Override
        publicvoid onClick(View v) {
            // TODO Auto-generated method stub
            FirstAsyncTask fat = newFirstAsyncTask(textview,bar);
            //execute方法传递一个参数到doInBackground
            fat.execute(1000);
        }
    };
 
    @Override
    publicboolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        returntrue;
    }
    //关联控件
    publicvoid findview(){
        textview = (TextView)findViewById(R.id.textview);
        button = (Button)findViewById(R.id.button);
        bar = (ProgressBar)findViewById(R.id.progressbar);
    }
    //设置控件响应
    publicvoid setview(){
        button.setOnClickListener(beginPro);
    }
 
}
2.添加FirstAnsyicTask类,其中中的代码如下:
importandroid.os.AsyncTask;
importandroid.widget.ProgressBar;
importandroid.widget.TextView;
 
 
publicclass FirstAsyncTask extendsAsyncTask<Integer, Integer, String>{
     
    privateTextView textview;
    privateProgressBar bar;
     
    publicFirstAsyncTask(TextView textview,ProgressBar progressbar){
        this.textview = textview;
        this.bar = progressbar;
    }
 
    //这个函数里面不能写修改控件内容的代码
    @Override
    protectedString doInBackground(Integer... params) {
        // TODO Auto-generated method stub
        UIOperator op = newUIOperator();
        inti;
        for(i=0;i<=100;i+=10){
            op.operator();
            publishProgress(i);
        }
         
        returni+params[0].intValue()+"";
    }
    //在doInBackground之后执行
    @Override
    protectedvoid onPostExecute(String result){
        textview.setText("异步操作执行结束"+result);
    }
    //在doInBackground之前执行
    @Override
    protectedvoid onPreExecute(){
        textview.setText("开始执行异步操作");
    }
    //每次执行publishprogress()之后执行以下函数
    @Override
    protectedvoid onProgressUpdate(Integer... values){
        intvalue = values[0];
        bar.setProgress(value);
    }
     
     
 
}
3.创建一个很简单的操作类
publicclass UIOperator {
    publicvoid operator(){
        try{
            Thread.sleep(1000);
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }
}