Android面试__异步消息处理机制

异步消息处理机制相关面试问题

Handler

什么是Handler

Handler通过发送和处理Message与Runnable对象来关联相对应线程MessageQueue。
1. 可以让对应的Message和Runnable在未来的某个时间点进行相应处理
2. 让自己想要处理的耗时操作放在子线程,让更新UI的操作放在主线程

handler的使用方法

  • post(runnable)
  • sendMessage(message)

handler的机制原理

handler引起的内存泄漏以及解决办法

原因:静态内部类持有外部类的匿名引用,导致外部activity无法释放

解决方法:handler内部持有外部acitivity的弱引用,并把handler改为静态内部类,在onDestory()中mHandler.removeCallback().

AsyncTask

什么是AsyncTask

本质上是一个封装了线程池和handler的异步框架

使用方法

  1. 三个参数

  2. 5个方法

AsyncTask机制原理

  1. AsyncTask的本质是一个静态的线程池,AsyncTask派生出的子类可以实现不同的异步任务,这些任务都是提交到静态的线程池中执行。
  2. 线程池中的工作线程质细腻个doInBackgrond(mParams)方法执行异步任务
  3. 当任务状态改变之后,工作线程会向UI线程发送消息,AsyncTask内部的InternalHandler响应这些消息,并调用相关的回调函数

注意事项

  • 内存泄漏(与Handler相似)
  • 生命周期(与Handler相似,应在Activity销毁时,调用cancel())
  • 结果丢失(与Handler相似,都是因为持有了Activity的引用)
  • 并行or串行

handlerThread

handlerThread是什么

  1. 产生背景

    开启Thread子线程进行耗时操作,但是多次创建和销毁线程是很耗费系统资源的

  2. 本质

    本质上是一个handler+thread+looper,是一个thread内部有looper

3.特点

- HandlerThread本质上是一个线程类,它继承了Thread;
- HandlerThread有自己的内部Looper对象,可以进行looper循环;
- 通过获取HandlerThread的looper对象传递给Handler对象,可以在handlerMessage方法中执行**异步任务**。
- 优点是不会有阻塞,减少了对性能的消耗,缺点是不能同时进行多任务的处理,需要等待进行处理,处理效率低。
- 与线程池注重并发不同,HandlerThread是一个串行队列,HandlerThread背后只有一个线程。

handlerThread源码解析

IntentService

含义

优先级比普通的Service高,内部封装了handlerThread()与handler的异步框架。

IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统的Service一样,同时,在所有任务执行完后,IntentService会自动停止,而不需要我们手动去控制或stopSelf()。另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent()回调方法中执行,并起,每次只会执行一个工作线程,执行完第一个再执行第二个(串行)。

  • 本质是一种特殊的Service,继承自Service并且本身就是一个抽象类
  • 内部通过HandlerThread与Handler实现异步操作

使用方法

复写构造方法与onHandleIntent(),onHandleIntent()为异步方法,可以执行耗时操作。

源码解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值