调用Looper.prepare();
注:1.因为在activity对象在构造前其所在的线程就已经执行Loop.prepare函数所以,在UI线程中无需进行此操作
2.在此方法内部执行的操作即为其成员变量TreadLocal(TLS)设置一个本线程的Looper对象,在Looper的构造方法中创建本线程的消息队列
2. 调用Looper.loop()
注:1.此方法使本线程进入消息处理循环之中
2.在此方法内部会获取本线程的MessageQueue并执行取出消息和添加消息
取出消息:queue.next();此函数内部分为三部分
1.调用一个JNI函数nativePollOnce(mPtr,int time)从C代码中取消息
2.判断消息所指定的执行时间是否到了,如果到了就返回消息给mMessages变量此代码需用synchronized(this)关键字进行同步
3. 如果mMessages为空则调用空闲回掉函数(可自己定义)
添加消息:enquenceMessage()
1.将msg赋给mMessages,
2.调用nativeWake(mPtr)这也是一个JNI函数他将mMessages添加到C环境中的消息队列
3.定义Handler
Handler必须被定义在Looper.prepare()之后 因为Handler的构造函数会对looper进行判空操作
异步消息处理线程还可以和跨进程调用IPC一起使用用于实现异步跨进程调用
转载请注明出处: http://my.oschina.net/u/1474965/blog/302410