Android 多线程
作者:陈正
最本质的多线程:hanlder 和 message 机制:
为何需要多线程:
在日常应用中,我们通常需要处理一些“后台,用户不可见”的操作,例如说,我们需
要下载一个音乐,要是你的应用必须等用户下载完成之后才可以进行别的操作,那肯定让
用户非常的不爽。这时候,我们通常的做法是,让这些操作去后台执行,然后等后台执行
完毕之后,再给用户弹出相应的提示信息。这时候,我们就需要使用多线程机制,然后通
过创建一个新的线程来执行这些操作。
明白了,实现需求,我们就准备着手实现了。但是,经过进一步的了解,我们悲剧的
发现,android 中的线程机制是,只能在 UI 线程中和用户进行交互。当我们创建了一个新
线程,执行了一些后台操作,执行完成之后,我们想要给用户弹出对话框以确认,但是却
悲剧的发现,我们根本无法返回 UI 主线程了。
(说明:何为 UI 线程:UI 线程就是你当前看到的这些交互界面所属的线程)。
这时候,我们如果想要实现这些功能,我们就需要一个 android 为我们提供的 handler
和 message 机制。
先讲解下编程机制:
我们通常在 UI 线程中创建一个 handler,handler 相当于一个处理器,它主要负责处理
和绑定到该 handler 的线程中的 message。每一个 handler 都必须关联一个 looper,并且两者
是一一对应的,注意,这点很重要哦!此外,looper 负责从其内部的 messageQueue 中拿出
一个个的 message 给 handler 进行处理。因为我们这里 handler 是在 UI 线程中实现的,所以
经过这么一个 handler、message 机制,我们就可以回到 UI 线程中了。
何为 handler:处理后台进程返回数据的工作人员。
何为 message:后台进程返回的数据,里面可以存储 bundle 等数据格式
何为 messageQueue:是线程对应 looper 的一部分,负责存储从后台进程中抛回的和当
前 handler 绑定的 message,是一个队列。
何为 looper:looper 相当于一个 messageQueue 的管理人员,它会不停的循环的遍历队
列,然后将符合条件的 message 一个个的拿出来交给 handler 进行处理。
注意,handler 是在 UI 线程中声明的,如果我们直接用类似代码执行一个线程的话,
实际上并没有创建一个新的线程,因为 handler 已经跟默认的 UI 线程中的 looper 绑定了。
如果有兴趣的话,可以去看下 Handler 的默认空构造函数便知道愿意了,里面直接绑定了
当前 UI 线程的 looper。
下面给出一个比较简单,并且实用的实例。
评论13