android 异步线程的实现

  1. 调用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

转载于:https://my.oschina.net/u/1474965/blog/302410

你可能感兴趣的:(移动开发,ui)