Android AsyncTask的理解

来源:互联网 发布:lol网吧代理软件 编辑:程序博客网 时间:2024/04/30 17:38

1. onPreExecute:主线程中,准备耗时操作

2. doInBackground : 在子线程中执行

3. onPostExecute:主线程中,耗时操作完成后,获得数据后的回调


public class MainActivity extends Activity {

    private TextView tv;

    privateExecutorService pool; 

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        tv = (TextView)findViewById(R.id.tv); 

        pool = Executors.newFixedThreadPool(3);

    }

 

    public void start(Viewview) {

 

        // 3.0之前,同时执行多个线程

        // 3.0之后,单线程

 

        // 做耗时操作获得变化后的数据   

        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {

            // 3.0以下

            // @1: 对应的参数是doInBackground回调中传入的参数,执行任务的参数

            // @2: 进度,onProgressUpdate的参数类型

            // @3:doInBackground的返回值类型,onPostExecute传入的参数类型

            newAsyncTask<Integer, Integer, Integer>() {

                @Override

                protectedvoid onPreExecute() {

                    // 主线程中, 准备执行前的回调 

                }

 

                @Override

                protectedInteger doInBackground(Integer... params) {

                    // 子线程,耗时操作

                    intstart = params[0];

                    intend = params[1];

 

                    intresult = 0;

                    for(int i = start; i <= end; i++) {

 

                        try{

                            Thread.sleep(50);

                        }catch (InterruptedException e) {

                            e.printStackTrace();

                        }

                        result= i;

 

                        publishProgress(result);

                    } 

                    return result;

                }

 

                @Override

                protectedvoid onProgressUpdate(Integer[] values) {

                    // 主线程中执行, 进度改变时的回调 

                    intprogress = values[0];

                    // UI更新

                    tv.setText(progress+ "");

                };

 

                @Override

                protectedvoid onPostExecute(Integer result) {

                    // 主线程中,执行完成的回调 

                    // 改变UI

                    tv.setText(result+ ""); 

                }

            }.execute(0,100);

        } else {

            // @1: 对应的参数是doInBackground回调中传入的参数,执行任务的参数

            // @2: 进度,onProgressUpdate的参数类型

            // @3:doInBackground的返回值类型,onPostExecute传入的参数类型

            newAsyncTask<Integer, Integer, Integer>() {

                @Override

                protectedvoid onPreExecute() {

                    // 主线程中, 准备执行前的回调 

                }

 

                @Override

                protectedInteger doInBackground(Integer... params) {

                    // 子线程,耗时操作

                    intstart = params[0];

                    intend = params[1]; 

                    intresult = 0;

                    for(int i = start; i <= end; i++) { 

                        try{

                            Thread.sleep(50);

                        }catch (InterruptedException e) {

                            e.printStackTrace();

                        }

                        result= i; 

                        publishProgress(result);

                    } 

                    return result;

                }

 

                @Override

                protectedvoid onProgressUpdate(Integer[] values) {

                    // 主线程中执行, 进度改变时的回调 

                    intprogress = values[0];

                    // UI更新

                    tv.setText(progress+ "");

                };

 

                @Override

                protectedvoid onPostExecute(Integer result) {

                    // 主线程中,执行完成的回调 

                    // 改变UI

                    tv.setText(result+ ""); 

                }

            }.executeOnExecutor(pool,0, 100);

        }

 

    }

 

}


Demo下载地址:http://download.csdn.net/detail/sanyang730/9515520

1 0
原创粉丝点击