zoukankan      html  css  js  c++  java
  • AsyncTask

    AsyncTask

    Google 为了方便我们在子线程中更新UI,提供了AsyncTask ,背后实现原理也是基于异步消息机制。

    主要用来处理后台耗时操作,并将数据更新到主线程的一个工具类。

    AsyncTask的生命周期和它所在的Activity的生命周期是不一致的,也就是说你关闭所在Activity,AsyncTask不一定停止。

    AsyncTask是一个抽象类,如果我们想要使用它,必须创建一个子类去继承它。

    public class DownLoadAsyncTask extends AsyncTask<Void, Integer, Boolean> {
      ......
    }
    

    继承时我们需要指定三个泛型参数,这三个参数的用途为:

    1.Params: 执行AsyncTask时,需要传入的参数,

    2.Progress: 后台执行任务时的返回参数类型,也就是 publishProgress() 方法的参数类型

    3.Result: 当后台任务执行完毕后的任务,也就是 doInBackground()方法的返回值类型

    需要重写的几个方法:

    1.onPreExecute()

    这个方法在后台任务开始执行前调用,进行一些界面上的初始化操作,比如显示一个进度条对话框。

    2.doInBackground(Params ... values)

    这个方法为必须实例化的抽象方法,这个方法的所有代码都会在子线程中执行,用来处理耗时操作。

    不可以进行UI操作

    3.onProgressUpdate()

    当在后台任务中调用了 publishProgrss(Progress ..)方法时,这个方法会被调用,这个方法一般用来更新UI。

    4.onPostExecut)()

    当后台任务执行结束并通过return语句进行返回时调用,一般会进行UI操作,比如根据返回结果来提示是否操作成功。

    注意:

    AsyncTask默认使用 AsyncTask.SERIAL_EXECUTOR 执行异步线程,也就是说都是按照顺序一个个的执行。

    如果需要并行的执行多个AsyncTask对象,需要通过

    downLoadAsyncTask.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR);
    
    文章部分内容摘自网络和图书,如有侵权,请联系我。
  • 相关阅读:
    SICP 1.9-1.10
    SICP 1.6-1.8
    SICP 1.1-1.5
    【最小生成树】Codeforces 707B Bakery
    【数学】Codeforces 707C Pythagorean Triples
    【离线】【深搜】【树】Codeforces 707D Persistent Bookcase
    【贪心】Vijos P1615 旅行
    【字符串】【最小表示法】Vijos P1683 有根树的同构问题
    【模拟】Vijos P1005 超长数字串
    【并查集】【模拟】Codeforces 698B & 699D Fix a Tree
  • 原文地址:https://www.cnblogs.com/-Tiger/p/7443680.html
Copyright © 2011-2022 走看看