AsyncTask的简单使用

AsyncTask的简单使用


一.AsyncTask简介

AsyncTask是一种轻量级的异步任务类,封装了Thread和Handler,可以很方便地执行后台任务操作以及在主线程中更新UI。但是对于特别耗时的任务来说,AsyncTask并不适合。应使用线程池执行特别耗时的任务。

二.AsyncTask

三.AsyncTask提供的四个主要方法

1.onPreExecute():在主线程中执行,在异步任务执行前调用这个方法,用于初始化一些操作,例如显示进度条等;

2.doInBackground(Params…params):在线程池中执行,用于执行异步任务,在此方法内可调用publishProgress(Progress…values)方法更新进度(publishProgress()又会调用onProgressUpdata()方法),当任务执行完毕后如果设置了返回值类型的话(即第三个泛型参数不为Void),会返回对应类型的值给onPostExecute()。

3.onProgressUpdate(Progress…values):在主线程中执行,可用与展示任务的进度;

4.onPostExecute(Result result):在主线程中执行,当异步任务执行完毕后会被调用,可将返回值展示出来或者做一些回收工作。

四.AsyncTask的简单使用

从0开始,每隔两秒钟值加1,到6位置。


    public class MainActivity extends Activity {
        private TextView textView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_layout);
            textView = (TextView) findViewById(R.id.tv);


            MyTask task = new MyTask();
            task.execute();

        }   

        class MyTask extends AsyncTask<Void, Integer, String> {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected String doInBackground(Void... params) {
                for(int i=0;i < 7;i++){
                    publishProgress(i);             //i的值每更新一次,通知onProgressUpdate(),让其在UI更新界面;
                    sleep(2000);                    //线程没循环一次睡眠2秒,这样就可以每2s就可以看到数字的变化。
                }
                return "任务完成";                  //当任务完成后返回此String给onPostExecute();
            }

            @Override
            protected void onProgressUpdate(Integer... values) {

                textView.setText(values[0] + "");       //更新UI;

            }

             @Override
            protected void onPostExecute(String s) {
                Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();          //将doInBackground()返回的值显示出来.
            }
        }

        private void sleep(int time){
            try {
                Thread.sleep(time);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值