Android学习笔记——AsyncTask

  参考 : 《Android进阶之光》

      https://www.jianshu.com/p/ab77a2e83c52

 

 

 

      java中的线程池框架,在android中一样可以使用,但android也有自己的多线程机制

-  AsyncTask

    这是一个异步任务类,含有三个泛型参数 

 

    
三个参数的含义:
      Params : 表示执行AsyncTask时需要传入的参数,可以在后台任务中使用
      Progress : 表示后台任务执行的进度
      Result : 表示后台任务返回结果的类型
      如果不传具体的参数,三个参数也都可以为void       使用方法为用一个类继承AsyncTask并重写几个主要方法:
      onPreExecute() : 运行在主线程               在异步任务执行前被调用               可用于进行界面初始化的操作            doInBackground(Params...params) : 在线程池中执行, 执行于onPreExecute之后,                  用于完成一些耗时任务,执行过程中可以调用publishProgress(Progress...values)来更新界面信息       onProgressUpdate(Progress...values) : 运行在主线程中                   用来响应 publishProgress()方法,通过参数对UI界面进行更新       onPostExecute(Result result) : 在主线程执行                 在后台任务执行完毕后调用,用于进行一些收尾工作或更新界面UI       onCancelled() : 在主线程中调用,               在异步任务被取消时调用,用于UI界面的取消更新        execute(Params...params) : 在主线程中调用               表示开始异步任务,一个异步对象只能调用一次execute()方法       cancel(
boolean) : 在主线程中调用, 表示停止一个异步任务

 

   使用方法:

    创建类 继承 AsyncTask, 重写几个主要方法。

    要开始和结束任务,只需要调用新建类 对象的 execute() 和 cancel()方法即可

    注意:  AsyncTask 有可能在Activity 应被回收时还在执行任务,而导致内存泄漏,所以要在 onDestroy()方法中 调用cancel(); 

      AsyncTask 不适合执行耗时过长的操作,如果耗时太长,应该使用线程池.

 AsyncTask 部分代码
  

 

  WorkRunnable 实现了Callable接口并实现了call 方法,在call方法中调用doInBackgroud执行任务,并最终调用
    PostResult将结果发送出去。
 FutureTask是一个可管理的异步任务,其实现了Runnable和Callable两个接口,所以可以包装它们。
    这里将一个WorkRunnable 交给FutrueTask 进行包装,便于之后的使用。

 当我们调用AsyncTask 的 execute 方法开始执行任务时,execute内部会调用 executeOnExecutor

    

 

 

  这里首先执行了onPreExecute方法,之后将参数传给WorkRunnable对象,因为mFuture之前已经关联mWorker对象,  
  这里直接将mFuture丢给exec执行,(exec是由参数传进来的线程池)
  执行mWorker的call方法最后会跳转到postResult方法,在PostResult方法中,会创建Message对象,之后调用
    message.sendToTarget(),将message发送给Handler处理。



    

    AsyncTask 内部是串行执行的,相比并行更加稳定
    如果想要并行执行,可以调用 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,""), 但并不建议使用并行

转载于:https://www.cnblogs.com/xfdmyghdx/p/10627979.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值