Android之AsyncTask(一)

前言:       

    干咱们这一行的,难免要跟异步线程打交道。虽然呢,网上可以找到很多很多的资料,但是,我还是要写这一篇文章,毕竟是本博客的第一篇技术性质的文章嘛(凑凑数。。。),哈哈,废话不多说,这就进入罗嗦的正题。


正文:

      本人暂时只接触了两种多线程的实现方式,一种是AsyncTask,另一种则是thread+looper。(写的有点罗嗦,我没有当大家是笨蛋,我只想写的详细点,给两年后的自己看的。。

(一) AsyncTask

第一步是创建一个类,继承AsyncTask.

public class HelloWorld extends AsyncTask<Object, Object, Object> {

        @Override
        protected Object doInBackground(Object... params) {

        <这里你可以进行一些耗时的工作,如下载数据等>

        }

}

        doInBackground(Object... params){} 是AsnycTask必须实现的方法(不然使用AsyncTask干嘛。。。),字面意思为后台处理,一般是进行数据处理。

AsyncTask '<>' 中的参数依次代表执行参数类型、进度参数类型和结果参数类型。

   执行参数类型:代表传入的数据的类型,即doInBackground(Object... params)中的参数类型。

   进度参数类型:就是doInBackground()执行过程中的产出参数类型,通过publishProgress()发消息 。

   结果参数类型:就是doInBackground()执行结束后,产生的结果的类型。


        doInBackgroud 实际上是一个子线程,所以呢,不能进行UI更改。有两个方法,如果有返回结果,那么重写onPostExecute方法。


public class HelloWorld extends AsyncTask<Object, Object, Object> {

        @Override
        protected Object doInBackground(Object... params) {

        <这里你可以进行一些耗时的工作,如下载数据等>

        }

     

         @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);
              <这里你可以进行一些UI操作>
        }

}

        一旦重写了此方法,doInBackgroud结束后,就直接调用此方法。


       接下来要讲的是  publishProgress(),publishProgress方法中传的参数即进度参数。那到底是publish到哪里去呢?若你有要publish的东西,你必须重写onProgressUpdate方法。具体实现看代码。


public class HelloWorld extends AsyncTask<Object, Object, Object> {

        @Override
        protected Object doInBackground(Object... params) {

        <这里你可以进行一些耗时的工作,如下载数据等>

          publishProgress("正在操作,请稍等。。。")

        }

     

         @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);

              <这里你可以进行一些UI操作>

        }

    

        @Override
        protected void onProgressUpdate(Object... values) {
            super.onProgressUpdate(values);

           t.setText((String)progress[0]);

              <这里你可以进行一些UI操作>
        }

}


       除了上面几个常用的方法以外,还有一个方法,即onPreExecute。PreExecute顾名思义就是预先处理。它是在doInBackground前自动执行的。我习惯用它来开启一个进度条。这不代表只能在onPreExecute中开启进度条,只是这样做可复用性高一点。有时候面对一个相对复杂的项目,里面难免会需要很多很多的异步线程。我喜欢把继承AsyncTask的类写成一个公共类,这样就不必左extends一下,右extends一下。(本人是懒人,能少写几句代码就少写几句,不过不喜欢写注释的话,时间长了,容易被里面乱七八糟的逻辑弄晕了。。),废话不多说,看代码。


    

public class HelloWorld extends AsyncTask<Object, Object, Object> {


@Override
    protected void onPreExecute() {
        super.onPreExecute();
             if(alertDialog!= null && !alertDialog.isShowing()){
                alertDialog.show();
             }

        }
    }


        @Override
        protected Object doInBackground(Object... params) {

        <这里你可以进行一些耗时的工作,如下载数据等>

        }

     

         @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);

              <这里你可以进行一些UI操作>

        if(alertDialog!= null && alertDialog.isShowing()){
                alertDialog.dismiss();
             }

        }

    

        @Override
        protected void onProgressUpdate(Object... values) {
            super.onProgressUpdate(values);

              <这里你可以进行一些UI操作>
        }

}


         哎呀本来想一篇搞定异步线程的,谁知我太罗嗦了,看样子得再分个两篇了。回顾一下本文。主要讲了AsyncTask的三个参数的意思,以及AsyncTask自带的四个方法,即onPreExecutedoInBackgroundonPostExecuteonProgressUpdate。下一篇将主要要讲述AsyncTask的取消和超时处理





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值