没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Android
下的多线程
在 Android 下面也有多线程的概念,在 C/C++中,子线程可以是一个函数,一般都是一
个带有循环的函数,来处理某些数据,优先线程只是一个复杂的运算过程,所以可能不需
要 while 循环,运算完成,函数结束,线程就销毁。对于那些需要控制的线程,一般我们
都是和互斥锁相互关联,从而来控制线程的进度,一般我们创建子线程,一种线程是很常
见的,那就是带有消息循环的线程。
消息循环是一个很有用的线程方式,曾经自己用 C 在 Linux 下面实现一个消息循环的机制,
往消息队列里添加数据,然后异步的等待消息的返回。当消息队列为空的时候就会挂起线
程,等待新的消息的加入。这是一个很通用的机制。
在 Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线
程一般都会有一个 Looper,这个事 android 的新概念。我们的主线程(UI 线程)就是一
个消息循环的线程。针对这种消息循环的机制,我们引入一个新的机制 Handle,我们有
消息循环,就要往消息循环里面发送相应的消息,自定义消息一般都会有自己对应的处理,
消息的发送和清除,消息的的处理,把这些都封装在 Handle 里面,注意 Handle 只是针
对那些有 Looper 的线程,不管是 UI 线程还是子线程,只要你有 Looper,我就可以往你
的消息队列里面添加东西,并做相应的处理。
但是这里还有一点,就是只要是关于 UI 相关的东西,就不能放在子线程中,因为子线程是
不能操作 UI 的,只能进行数据、系统等其他非 UI 的操作。
那么什么情况下面我们的子线程才能看做是一个有 Looper 的线程呢?我们如何得到它
Looper 的句柄呢?
Looper.myLooper();获得当前的 Looper
Looper.getMainLooper () 获得 UI 线程的 Lopper
我们看看 Handle 的初始化函数,如果没有参数,那么他就默认使用的是当前的
Looper,如果有 Looper 参数,就是用对应的线程的 Looper。
如果一个线程中调用 Looper.prepare(),那么系统就会自动的为该线程建立一个消息队
列,然后调用 Looper.loop();之后就进入了消息循环,这个之后就可以发消息、取消息、
和处理消息。这个如何发送消息和如何处理消息可以再其他的线程中通过 Handle 来做,
但前提是我们的 Hanle 知道这个子线程的 Looper,但是你如果不是在子线程运行
Looper.myLooper(),一般是得不到子线程的 looper 的。
public void run() {
$$$$$$$$$$$ synchronized (mLock) {
$$$$$$$$$$$$$$$ Looper.prepare();
$$$$$$$$$$$$$$ //do something
$$$$$$$$$$$ }
tqtihihc
- 粉丝: 11
- 资源: 75
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页