Android之AsyncTask详解

为什么要学习AsyncTask?

  现在的Android程序离不开异步任务处理,如果在一个进程中频繁的创建和销毁线程,显然不是高校的方法,这里就使用AsyncTask来处理这些东西

一、什么是多线程

  多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。 [1]  在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。

二、我们必须了解下什么是ANR

  在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。

三、AsyncTask简介

  AsyncTask是一个抽象类,它是由Android封装的一个轻量级异步类,它可以在线程池中执行后台任务,并可以把执行的程序和运行的结果给Ui线程处理

  Ps:因为有anr的存在所以我们不能在Ui线程中处理耗时操作。一定要注意一下两点:

    绝对不能在UI Thread当中进行耗时的操作,不能阻塞我们的UI Thread
        不能在UI Thread之外的线程当中操纵我们的UI元素

四、AsyncTask的使用

  AsyncTask是一个抽象类,如果要使用这个类,需要用一个自定义类继承这个类,这个类有一个doInBackgroud的抽象方法,在使用这个抽象类的时候需要执行三个范型:AsyncTask <Params, Progress, Result>,如果这里不指定需要写成void

  1. Params: 这个泛型指定的是我们传递给异步任务执行时的参数的类型      
  2. Progress: 这个泛型指定的是我们的异步任务在执行的时候将执行的进度返回给UI线程的参数的类型
  3. Result: 这个泛型指定的异步任务执行完后返回给UI线程的结果的类型

这里为了处理数据方便还需要写四个方法

onPreExecute() 这个方法是在执行异步任务之前的时候执行,并且是在UI Thread当中执行的,通常我们在这个方法里做一些UI控件的初始化的操作
doInBackground(Params... params) 在onPreExecute()方法执行完之后,会马上执行这个方法,这个方法就是来处理异步任务的方法
onPostExecute 当我们的异步任务执行完之后,就会将结果返回给这个方法,这个方法也是在UI Thread当中调用的,
onProgressUpdate(Progess... values 这个方法也是在UI Thread当中执行的,我们在异步任务执行的时候,有时候需要将执行的进度返回给我们的UI界面

 

猜你喜欢

转载自www.cnblogs.com/mCarrYoung/p/9393140.html