[MessageQueue.java-->MessageQueue.MessageQueue()] MessageQueue() { nativeInit(); //构造函数调用nativeInit,该函数由Native层实现 } nativeInit()方法的真正实现为android_os_MessageQueue_nativeInit()函数,其代码如下: [android_os_MessageQueue.cpp-->android_os_MessageQueue_nativeInit()] static void android_os_MessageQueue_nativeInit(JNIEnv* env, jobject obj) { // NativeMessageQueue是MessageQueue在Native层的代表 NativeMessageQueue* nativeMessageQueue = new NativeMessageQueue(); ...... // 将这个NativeMessageQueue对象设置到Java层保存 android_os_MessageQueue_setNativeMessageQueue(env, obj, nativeMessageQueue); } nativeInit函数在Native层创建了一个与MessageQueue对应的NativeMessageQueue对象,其构造函数如下: [android_os_MessageQueue.cpp-->NativeMessageQueue::NativeMessageQueue()] NativeMessageQueue::NativeMessageQueue() { /* 代表消息循环的Looper也在Native层中呈现身影了。根据消息驱动的知识,一个线程会有一个 Looper来循环处理消息队列中的消息。下面一行的调用就是取得保存在线程本地存储空间 (Thread Local Storage)中的Looper对象 */ mLooper = Looper::getForThread(); if (mLooper == NULL) { /* 如果是第一次进来,则该线程没有设置本地存储,所以需要先创建一个Looper,然后再将其保 存到TLS中,这是很常见的一种以线程为单位的单例模式 */ mLooper = new Looper(false); Looper::setForThread(mLooper); } }