Android -- AsyncTask使用

新建一个MyAsynTask.java文件,继承自AsyncTask。


public class MyAsynTask extends AsyncTask<String, Integer, String> {
    /**
     * 参数1:doInBackground:方法参数有关 参数2:onProgressUpdate:方法参数有关
     * 参数3:doInBackground:方法的类型有关、onPostExecute:方法参数有关
     *
     */
    private TextView tv;
    private ProgressBar pb;
    // 构造方法
    public MyAsynTask(TextView tv, ProgressBar pb) {
        this.tv = tv;
        this.pb = pb;
    }
    // 核心处理方法
    @Override
    protected String doInString...  params) { // String... params:可变参数。params 参数为启动时传递的参数。
        int i = 0;
        for (i = 0; i <= 100; i++) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //触发onProgressUpdate执行.传递的参数为onProgressUpdate方法中values数组的值
            publishProgress(i);
        }
        return i+"";
    }
    // 当异步结束的时候触发此方法
    @Override
    protected void onPostExecute(String result) {
        if (result != null) {
            tv.setText("异步结束:" + result);
        }
        super.onPostExecute(result);
    }
    // 当异步开始的时候触发
    @Override
    protected void onPreExecute() {
        System.out.println("异步开始了");
        tv.setText("异步开始");
        super.onPreExecute();
    }
    // 正在处理的时候出发。与UI主线程进行交互的
    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        pb.setProgress(values[0]);
        tv.setText("i="+values[0]);
    }
}


在MainActivity中建一个Progressbar和Button按钮,点击按钮,进度条进度变化。


public class MainActivity extends Activity {
    private Button btn;
    private TextView tv;
    private ProgressBar pb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.button1);
        tv = (TextView) findViewById(R.id.textView1);
        pb = (ProgressBar) findViewById(R.id.progressBar1);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                MyAsynTask myAsynTask = new MyAsynTask(tv, pb);
                myAsynTask.execute("");// 启动方法
            }
        });
    }
}

运行结果:(三幅图分别为运行前、中、后)


你可能感兴趣的:(AsyncTask异步方法使用)