AsyncTask与Handler

多线程

首先了解多线程

  • 应用程序(Application):为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)

  • 进程:进程指正在运行的程序

    • 系统调度与资源分配的一个独立单位
    • 当一个程序进入内存运行,即变成一个进程
    • 进程是处于运行过程中的程序,并且具有一定独立功能
  • 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行

    • 一个进程中至少有一个线程
    • 一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序

简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程

  1. 线程是由程序负责管理的

  2. 而进程则是由系统进行调度的

线程的生命周期

  • 新建 :从新建一个线程对象到程序start() 这个线程之间的状态,都是新建状态;
  • 就绪 :线程对象调用start()方法后,就处于就绪状态,等到JVM里的线程调度器的调度;
  • 运行 :就绪状态下的线程在获取CPU资源后就可以执行run(),此时的线程便处于运行状态,运行状态的线程可变为就绪、阻塞及死亡三种状态。
  • 等待/阻塞/睡眠 :在一个线程执行了sleep(睡眠)、suspend(挂起)等方法后会失去所占有的资源,从而进入阻塞状态,在睡眠结束后可重新进入就绪状态。
  • 终止 :run()方法完成后或发生其他终止条件时就会切换到终止状态。

线程创建的一般方法

实现步骤 优势 劣势
继承Thread类 ①、定义类继承Thread
②、复写Thread类中的run方法(目的:将自定义代码存储在run方法,让线程运行)
③、调用线程的start方法:该方法有两步:启动线程,调用run方法。
编写简单,可直接用this.getname()获取当前线程,不必使用Thread.currentThread()方法 已经继承了Thread类,无法再继承其他类
继承Thread类 ①、定义类实现Runnable接口
②、覆盖Runnable接口中的run方法(将线程要运行的代码放在该run方法中)
③、通过Thread类建立线程对象
④、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数(线程执行指定Runnable对象的run方法)
⑤、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
避免了单继承的局限性、多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形 比较复杂、访问线程必须使用Thread.currentThread()方法、无返回值
通过Callable和Future创建线程 ①、创建Callable接口的实现类,并实现call()方法,改方法将作为线程执行体,且具有返回值
②、创建Callable实现类的实例,使用FutrueTask类进行包装Callable对象,FutureTask对象封装了Callable对象的call()方法的返回值
③、使用FutureTask对象作为Thread对象启动新线程
④、调用FutureTask对象的get()方法获取子线程执行结束后的返回值
有返回值、避免了单继承的局限性、多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形 比较复杂、访问线程必须使用Thread.currentThread()方法

调用start()方法将会创建一个执行run()方法的线程

不管何种情况下,要想启动多线程,一定依靠Thread类完成

多线程应用在Android开发

    1. 继承Thread类
    2. 实现Runnable接口
    3. Handler
    4. AsyncTask
    5. HandlerThread
    6. IntentService

进程和线程的区别

根本区别

  • 进程是操作系统资源分配的基本单位

  • 线程是处理器任务调度和执行的基本单位

进程 线程
资源开销 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销 线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小
包含关系 如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的 线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程
内存分配 进程之间的地址空间和资源是相互独立的 同一进程的线程共享本进程的地址空间和资源
影响关系 一个进程崩溃后,在保护模式下不会对其他进程产生影响 一个线程崩溃整个进程都死掉
执行过程 每个独立的进程有程序运行的入口、顺序执行序列和程序出口 线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

多进程要比多线程健壮

两者均可并发执行

AsyncTask和Handler的区别

  • 数据简单使用AsyncTask,实现代码简单,数据量多且复杂使用handler+thread

  • 相比较AsyncTask来说能更好的利用系统资源且高效,但有些复杂逻辑比较难完成

AsyncTask实现的原理和适用的优缺点

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程

  • 使用的优点:

    1. 简单,快捷

    2. 过程可控

  • 使用的缺点:
    在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来.

Handler异步实现的原理和适用的优缺点

在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)运行并生成Message-Looper获取Message并传递给HandlerHandler逐个获取Looper中的Message,并进行UI变更

  • 使用的优点:

    1. 结构清晰,功能定义明确

    2. 对于多个后台任务时,简单,清晰

  • 使用的缺点:
    在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)

多线程(Thread、线程创建、线程池

Android

Application应用程序

安卓阿申克塔斯克弃用, 现在怎么办? (techyourchance.com)

Android —— 静态AsyncTask解决内存泄漏

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容