初学AsyncTask

来源:互联网 发布:阿里云新手礼包在哪里 编辑:程序博客网 时间:2024/06/05 06:43

AsyncTask必须执行的方法:
1.doInBackground(Params…);//耗时操作
2.onPostExecute(Result) ;//耗时操作执行完成后调用

可选方法:
1.onPreExecute() ;//耗时操作执行之前调用
2.onProgressUpdate(Progress…) ;//调用publishProgress后调用
3.onCancelled() ;//myAsyncTask.cancel(true); 时调用


MainActivity.java

package com.example.tetst0104;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends Activity {    TextView tv;    ProgressBar pb;    Button bt;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        tv = (TextView) findViewById(R.id.textView01);        pb = (ProgressBar) findViewById(R.id.progressBar02);        bt = (Button) findViewById(R.id.button03);        bt.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                MyAsyncTask myAsyncTask = new MyAsyncTask(tv,pb);                myAsyncTask.execute(1000);                bt.setClickable(false);            }        });    }}

NetOperator.java

package com.example.tetst0104;public class NetOperator {    public void operator() {        try {            //休眠1秒            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

MyAsyncTask.java

package com.example.tetst0104;import android.os.AsyncTask;import android.widget.ProgressBar;import android.widget.TextView;public class MyAsyncTask extends AsyncTask<Integer, Integer, String> {    TextView tv ;    ProgressBar pb;    public MyAsyncTask(TextView tv, ProgressBar pb) {        this.tv = tv;        this.pb = pb;    }    /**     * 异步执行前调用     */    @Override    protected void onPreExecute() {        tv.setText("开始异步");    }    /**     * 处理后台耗时操作     * @param params 为 AsyncTask<参数,参数,参数>的第一个参数     * 返回值String 为 AsyncTask<参数,参数,参数>的第三个参数     */    @Override    protected String doInBackground(Integer... params) {        //网络连接时 可以传入URL 即        //AsyncTask<String, Integer, String>        //doInBackground(String... params)        NetOperator operator = new NetOperator();        int i = 0;        for (i=10;i<=100;i+=10) {            operator.operator();            publishProgress(i);        }        return i+params[0]+"";    }    /**     * 耗时操作执行完后执行     * @param result 为  doInbackground 的返回值      */    @Override    protected void onPostExecute(String result) {        tv.setText("异步完成"+result);    }    /**     * 调用publichProgress()时调用     * @param values 为AsyncTask<参数,参数,参数>的第二个参数     */    @Override    protected void onProgressUpdate(Integer... values) {        pb.setProgress(values[0]);    }}

转载于:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html#commentform

0 0