zoukankan      html  css  js  c++  java
  • 【转】Android的线程和线程池(AsyncTask)

    线程只要分为:主线程和子线程主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时的操作,由于Android的特性,如果在主线程中执行耗时操作那么就会导致程序无法及时响应,因此耗时操作必须方法子线程中去执行.
    AsyncTask
    AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递到主线程并在主线程中更新UI.从实现上来说,AsyncTask封装了Thread和Handler,通过AsyncTask可以更加方便地执行后台任务以及在主线程中访问UI,但是AsyncTask并不适合执行特别耗时的后台任务。AsyncTask是一个抽象的泛型类,所以如果我们想要使用它,就必须创建一个子类去继承它,在继承时我们可以为AsyncTask类指定三个泛型类。

    Params在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。
    Progress后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位
    Result当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型。一个简单的自定义AsyncTask可以写成如下:

    AsyncTask的工作原理
    为了分析AsyncTask的工作原理,我们从他的execute方法开始分析,execute()方法会调用executeOnExecutor方法


    从上面的代码中,sDefaultExecutor实际上是一个串行的线程池,一个进程中所有的AsyncTask全部在这个串行的线程中排队执行,这个排队执行的过程后面再进行分析。在executeOnExecutor方法中,AsyncTask的onpreExecute方法最先执行,然后线程池开始执行。

    原文链接:http://www.jianshu.com/p/685f584db344

  • 相关阅读:
    邮票面值设计(codevs 1047) 题解
    练习 : 生成器和模块
    练习 : 数据类型之字符串
    练习 : 函数基础
    练习 : 高阶函数
    练习 : 数据类型之列表
    练习 : 数据类型之元组
    练习 : 数据类型之字典
    练习 : 分支结构和循环结构
    练习 : 变量和运算符
  • 原文地址:https://www.cnblogs.com/DaisyXuRan/p/5475485.html
Copyright © 2011-2022 走看看