Android面试相关—AsyncTask机制

Asynctask和handler一样,也是Android中异步消息的处理机制,AsyncTask机制底层封装了线程池和Handler,便于执行后台任务以及在子线程中进行UI操作。使用AsyncTask要理解3个泛型参数和4个方法。

Params: 这个泛型指定的是我们传递给异步任务执行时的参数的类型。

Progress: 这个泛型指定的是我们的异步任务在执行的时候将执行的进度返回给UI线程的参数的类型。

Result: 这个泛型指定的异步任务执行完后返回给UI线程的结果的类型。

我们在定义一个类继承AsyncTask类的时候,必须要指定好这三个泛型的类型,如果都不指定的话,则都将其写成Void。

4个方法:当我们执行一个异步任务的时候,其需要按照下面的4个步骤分别执行

onPreExecute(): 这个方法是在执行异步任务之前的时候执行,并且是在主线程当中执行的,通常我们在这个方法里做一些UI控件的初始化的操作,例如弹出一给ProgressDialog。

doInBackground(Params… params): 在onPreExecute()方法执行完之后,会马上执行这个方法,这个方法就是来处理异步任务的方法,Android操作系统会在后台的线程池当中开启一个worker thread来执行我们的这个方法,所以这个方法是在工作线程当中执行的,这个方法执行完之后就可以将我们的执行结果发送给我们的最后一个 onPostExecute 方法,在这个方法里,我们可以从网络当中获取数据等一些耗时的操作。

onProgressUpdate(Progess… values): 这个方法也是在主线程当中执行的,我们在异步任务执行的时候,有时候需要将执行的进度返回给我们的UI界面,例如下载一张网络图片,我们需要时刻显示其下载的进度,就可以使用这个方法来更新我们的进度。在调用之前,我们要在 doInBackground 方法中调用publishProgress(Progress) 的方法来将我们的进度时刻传递给onProgressUpdate 方法来更新。

onPostExecute(Result… result): 当我们的异步任务执行完之后,就会将结果返回给这个方法,这个方法也是在UI Thread当中调用的,我们可以将返回的结果显示在UI控件上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android开发者:你真的会用AsyncTask吗? 导读.1 在Android应用开发中,我们需要时刻注意保证...
    cxm11阅读 7,581评论 0 29
  • AsyncTask 是一个简单实用的多线程异步任务工具类。 Android 开发中经常遇到需要将耗时的操作放到子线...
    HJDaryl阅读 4,028评论 0 1
  • 在Android中我们可以通过Thread+Handler实现多线程通信,一种经典的使用场景是:在新线程中进行耗时...
    吕侯爷阅读 6,225评论 2 23
  •   在Android中,如果想要在子线程里进行UI操作,就需要借助Android的异步消息处理机制。为了更加方便在...
    抱不住太阳的深海line阅读 3,388评论 0 1
  • 总结:今天去花都素食餐厅吃素,看望朋友!他在那边做店长!素食餐厅地方还蛮大的,以绿色为主题,跟素食很贴切!中午来吃...
    耕读传家林亮伟阅读 793评论 0 1