android多线程之AsyncTask

Android 多线程之AsyncTask

 

AsyncTask主要用于UI线程普通异步操作中,要想使用,需继承此类,然后在继承的子类中进行相关操作,子类必须至少继承重写doInBackground方法。

1.     子类代码示例:

Public ClassSubAsyncTask extends AsyncTask<Integer,Integer,String>{

     

      private TextView tv_numUpdate;

 

      Public TestAsyncTask(TextView tv_num){

             this.tv_numUpdate = tv_num;

}

     

      //该方法并不运行在UI线程当中,所以在该方法当中,不能对UI当中的控件进行设置和修改

      //主要用于进行异步操作。

      @Override

      protected String doInBackground(Integer...params) {

            

             int i = 0;

             for(i = 1; i <= params[0]; i++){

                    Thread.sleep(1000);

                    //用于发布更新消息

                    publishProgress(i);

             }

             return i + params[0].intValue() +"";

      }

     

      //doInBackground方法执行结束之后再运行,并且运行在UI线程当中。

      //主要用于将异步任务执行的结果展示给客户

      @Override

      protected void onPostExecute(Stringresult) {

             Log.i(“TEST”,"异步操作执行结束" + result);

      }

 

      //该方法运行在UI线程当中,主要用于进行异步操作之前的UI准备工作

      @Override

      protected void onPreExecute() {

             Log.i(“TEST”,"开始执行异步操作");

      }

 

      //doInBackground方法当中,每次调用publishProgress()方法之后,都会触发该方法

      //用于在异步任务执行的过程当中,对用户进行提示,例如控制进度条、文本提示等

      @Override

      protected void onProgressUpdate(Integer...values) {

            

             this.tv_numUpdate .setText(values[0].toString());

      }

}

 

2.     调用:在UI主线程中调用

SubAsyncTask task = new SubAsyncTask((TextView) findViewById(R.id.tv_numUpdate));//传入的是一个文本TextView对象

task.execute(10);//执行,传入的是第一个整形参数,此方法必须有

3.     AsyncTask<Params,Progress, Result>:继承的子类采用泛型的形式,其中第一个参数类型对应的doInBackground()方法的输入参数类型;第二个参数类型对应的是onProgerssUpdate()方法的输入参数类型;第三个参数类型对应的是onInBackground()的返回值类型和onPostExecute()的输入参数值类型。

4.     继承自AsyncTask的子类注意事项:

首先,执行的是onPreExecute()方法,此方法对应的UI主线程;

再执行doInBackground()方法,此方法对应的是异步操作,是另外一个线程,主要用于异步更新控件信息,此方法中采用publishProgress()方法发布更新消息,与onProgressUpdate()方法配合使用,更新UI线程控件信息;

最后是onPostExecute()方法,该方法对应的是UI主线程;

另外,doInBackground()的返回值是onPostExecute()方法的输入参数值。

 

 

备注:以上资料整理来自Mars老师的视频资料和android api 文档说明,推荐学习android的孩子们,看看mars老师的视频,不错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值