Android笔记——异步消息处理机制

2022-02-18  本文已影响0人  莫忘初心_倒霉熊

1.0异步消息处理机制

Android中的异步消息处理主要由4个部分组成:Message、Handler、MessageQueue和Looper。

异步消息处理的整个流程如下:

  1. 首先需要在主线程当中创建一个Handler对象,并重写handleMessage()方法。
  2. 然后当子线程中需要进行操作时,就创建一个Message对象,并通过Handler将这条消息发送出去。
  3. 之后这条消息会被添加到MessageQueue的队列中等待被处理,而Looper则会一直尝试从MessageQueue中取出待处理消息。
  4. 最后分发回Handler的handleMessage()方法中。

由于Handler的构造函数中传入了Looper.getMainLooper(),所以此时handleMessage()方法中的代码也会在主线程中运行。
整个异步消息处理机制的流程如图所示。


异步消息处理机制流程示意图

1.1异步消息处理应用

Android是不允许在子线程中进行UI操作的。但是有些时候,我们必须在子线程里执行一些耗时任务,然后根据任务的执行结果来更新相应的UI控件,这该如何是好呢?
对于这种情况,使用上文提到的异步消息处理机制,可以完美地解决了在子线程中进行UI操作的问题。

代码如下:


异步消息处理应用

2.0AsyncTask

Android提供了AsyncTask,借助AsyncTask,即使对异步消息处理机制完全不了解,也可以十分简单地从子线程切换到主线程。AsyncTask背后的实现原理也是基于异步消息处理机制的,只是Android帮做了很好的封装。

AsyncTask是一个抽象类,必须创建一个子类去继承它。在继承时可以为AsyncTask类指定3个泛型参数,这3个参数的用途如下。

因此,一个最简单的自定义AsyncTask就可以写成如下形式:


最简单的自定义AsyncTask

还需要重写AsyncTask中的几个方法才能完成对任务的定制。经常需要重写的方法有以下4个。

因此,一个比较完整的自定义AsyncTask就可以写成如下形式:


较完整的自定义AsyncTask

如果想要启动这个任务,只需编写以下代码即可:


启动任务
上一篇 下一篇

猜你喜欢

热点阅读