科普一下 线程是操作系统调度的最小单元.

线程在android中是一个很重要的概念.
主线程 也叫 UI 线程 作用: 运行四大组件以及处理他们和用户交互.
子线程 作用; 执行耗时任务. 比如 I/O 操作, 网络请求.

android 3.0 开始,网络访问必须放在子线程中.

线程形态: 1传统的Thread, 2 AsyncTask ,3 HandlerThread ,4 IntentService
2,3,4 这个三者底层实现也是线程,各有各自的优缺点.

下面解析一下

AsyncTask

一种 轻量级的异步任务类,可以在线程池中执行后台任务 . 然后把执行的进度条和最终结果传递给主线程 并在主线程中更新UI.

注意:AsyncTask 不适合特别耗时的后台任务. 可以使用线程池来解决.

4个核心方法

此外还有一个方法

步骤 : onPreExecute 先执行, 接着是 doInBackground ,最后是 onPostExecute , 除了这个四个方法之外 , 当异步任务取消的时候会执行 onCancelled()方法. 这个时候 onPostExecute 不会调用了

AsyncTask 使用限制
1 ,AsyncTask的类必须在主线程中加载. (5.0源码中可见)
2.execute 方法必须在UI线程调用.
3.一个AsyncTask 对象只能执行一次. 否则报运行时异常错误
4.AsyncTask的对象必须在主线程中创建.

源码解析

在多说一点 :

AsyncTask中有两个线程池,(SerialExecutor 和 THREAD_POOL_EXECUTOR ) 和 一个Handler(InternalHandler ) ,
其中,
线程池SerialExecutor 用于任务的排队,
THREAD_POOL_EXECUTOR 用于真正的执行任务,
InternalHandler 用于将执行环境从线程池中切换到主线程.

好的今天 就分享这么多啦. 下次有时间 和大家分享一下 线程池的 故事..

Android 中的线程及 AsyncTask(线程形态之一)解析一下相关推荐

  1. 在Android中使用Handler和Thread线程执行后台操作

    在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...

  2. java线程画动图闪,Android中利用画图类和线程画出闪烁的心形,android心形,package com....

    Android中利用画图类和线程画出闪烁的心形,android心形,package com.package com.tt.view;import android.content.Context;imp ...

  3. Android中常见的4种线程池的理解(转)

    转:https://blog.csdn.net/l540675759/article/details/62230562 转:https://blog.csdn.net/seu_calvin/artic ...

  4. Android开发——Android中常见的4种线程池(保证你能看懂并理解)

    0.前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用 ...

  5. Android中Activity、Service和线程之间的通信

    Activity.Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者 ...

  6. android使用动画画心形,Android中利用画图类和线程画出闪烁的心形,送给亲爱的他(她)...

    本文讲解主要涉及的知识点: 1.线程控制 2.画图类 3.心形函数 大家先看图片: 因为前一段时间在写画图类,刚好有一个线程控制画图闪烁的,我就想说我能不能做一个心形闪烁的,出来的效果就如图,先贴再讲 ...

  7. Android中网络请求创建单个线程池的方法

    创建单个线程池的方法 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; impor ...

  8. Android中后台线程如何与UI线程交互

    我想关于这个话题已经有很多前辈讨论过了.今天算是一次学习总结吧. 在android的设计思想中,为了确保用户顺滑的操作体验.一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必须 ...

  9. android asynctask 线程池,AsyncTask和线程池

    在Android中,UI操作是线程不安全的,如果想要在子线程中进行UI操作,或者在主线程中进行耗时操作,则需要借助Android的异步消息处理机制.但我们需要开启N个线程的时候,我们可以这样做: 直接 ...

最新文章

  1. Java的上溯、下溯
  2. Application Virtualization 4.5 部署之(一)
  3. perl的安装和版本切换工具-perlbrew
  4. python polygon函数_Python 人脸识别就多简单,看这个就够了!
  5. python类的继承super方法_Python类的继承super相关原理解析
  6. 洛谷P2342-叠积木
  7. Java / Cloud:如何快速创建支持Kubernetes的REST微服务
  8. 【小技巧】字符char与整型int的相互转换
  9. 「每天一道面试题」Redis的优势有哪些?
  10. TTS 语音修复 ,缺少文件的,没注册类的
  11. 迅雷bolt界面引擎
  12. HTML如何下载文件
  13. 为什么苏联打下了如此强的数学基础,俄罗斯却至今无法成为AI强国?
  14. 全国计算机专业大学排名全部,全国计算机专业大学排名汇总
  15. Ontology对接资源整理
  16. linux 脚本 pause,Linux Shell脚本pause命令
  17. 排序 ---- 快排(C语言)
  18. django项目启动加载训练的模型报错OSError: Unable to open file (unable to open file: name = ‘model/model_weigh完美解决
  19. Windows 11操作系统 ndis.sys 驱动无限蓝屏问题修复
  20. Thinkphp中的assign() 和 display()

热门文章

  1. java 今天 昨天_js获取当前时间(昨天、今天、明天)
  2. abstract类_012、Java的抽象方法、接口和String类
  3. win7光盘修复计算机在哪,win7如何创建系统还原及系统修复光盘功能应用
  4. java 读 xml_Java读写XML代码示例
  5. TPAMI 2021 | 时间走向二维,基于文本的视频时间定位新方法兼顾速度与精度
  6. 推荐一个C++练手项目,面试也可用
  7. 细节满满!理解对比学习和SimCSE,就看这6个知识点
  8. Python基础:对象的深拷贝和浅拷贝的区别
  9. 人工智能:物体检测之Faster RCNN模型
  10. java 加法 溢出_java实现两个大数相加,可能出现溢出错误