Android 线程消息循环机制
来源:互联网 发布:在淘宝上怎么买到弓弩 编辑:程序博客网 时间:2024/05/16 06:09
android.os.Looper:
注:写在Looper.loop()之后的代码不会被立即执行,当调用后mHandler.getLooper().quit()后,loop才会中止,其后的代码才能得以运行。Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。
class LooperThread extends Thread {//Handler不带参数的默认构造函数:new Handler(),实际上是通过Looper.myLooper()来获取当前线程中的消息循环,//而默认情况下,线程是没有消息循环的,所以要调用 Looper.prepare()来给线程创建消息循环,然后再通过,Looper.loop()来使消息循环起作用。
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
另,Activity的MainUI线程默认是有消息队列的。所以在Activity中新建Handler时,不需要先调用Looper.prepare()。
android.os.Handler:
Handler用于跟线程绑定,来向线程的消息循环里面发送消息、接受消息并处理消息。
以下是不带参数的Handler构造器:
public Handler() {
if (FIND_POTENTIAL_LEAKS) {
final Class<? extends Handler> klass = getClass();
if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&
(klass.getModifiers() & Modifier.STATIC) == 0) {
Log.w(TAG, "The following Handler class should be static or leaks might occur: " +
klass.getCanonicalName());
}
}
mLooper = Looper.myLooper();
if (mLooper == null) {
//如果当前线程里面没有消息循环的时候,系统抛出异常。即在一个线程里如果想用Handler来处理消息,是需要调用Looer.prepare()来创建消息循环的,而MainUI线程不需要。
throw new RuntimeException(
"Can't create handler inside thread that has not called Looper.prepare()");
}
mQueue = mLooper.mQueue;
mCallback = null;
}
1、post(Runnable)
, postAtTime(Runnable, long)
,postDelayed(Runnable, long);
2、sendEmptyMessage(int)
, sendMessage(Message)
, sendMessageAtTime(Message, long)
, andsendMessageDelayed(Message, long)。
- Android 线程消息循环机制
- Android 线程消息循环机制
- Android消息循环机制
- Android消息循环机制
- Android消息循环机制
- Android消息循环机制
- Android 线程消息循环
- Android消息循环机制总结
- Android消息循环机制探讨
- Android消息循环机制分析
- Android Handler 线程消息机制
- Android线程与消息机制
- Android线程与消息机制
- Android 线程消息机制简介
- android Toast、Looper、Handler消息循环机制
- Android 消息循环机制源码分析
- Android 消息循环机制源码分析
- Android 消息循环机制源码分析
- 非常好用的代码查看分析工具Source Insight
- osgGIS工具简介
- 链接外部的css或js文件名后带问号(?)参数的作用 .js? .css?
- 嵌入式系统USB CDROM虚拟光驱驱动程序开发
- 调用 FormatEx 函数格式化磁盘的代码
- Android 线程消息循环机制
- Silverlight的依赖属性与附加属性http://www.silverlightchina.net/html/tips/2010/0328/920.html
- 电脑自动关机命令详解
- OGNL中要用到的集合的伪属性
- Android下蒙板效果的实现
- C#类的定义
- Oracle 包锁,解锁
- ubuntu apt-get
- ACMSTEP 2.3.8 小兔的棋盘 //高精度 卡特兰数