7.2.2 创建Java层的MessageQueue对象

MessageQueue类定义于frameworks/base/core/java/android/os/MessageQueue.java中,其代码如下:


public class MessageQueue{

private final boolean mQuitAllowed;

private int mPtr;//used by native code

//……

private native void nativeInit();

MessageQueue(boolean quitAllowed){

mQuitAllowed=quitAllowed;//true

nativeInit();

}

}


在MessageQueue的构造方法中,首先给传入的quitAllowed参数的成员变量mQuitAllowed赋值为true,表示当前消息循环允许退出;然后调用Native方法nativeInit进入Native层的初始化操作。

nativeInit方法由JNI层实现,位于/frameworks/base/core/jni/android_os_MessageQueue.cpp中,其代码如下:


static void android_os_MessageQueue_nativeInit(JNIEnv*env, jobject obj){

//在JNI层创建了NativeMessageQueue对象

NativeMessageQueue*nativeMessageQueue=new NativeMessageQueue();

if(!nativeMessageQueue){

jniThrowRuntimeException(env,"Unable to allocate native queue");

return;

}

nativeMessageQueue->incStrong(env);

//obj表示调用native的Java类,即Java层的MessageQueue

android_os_MessageQueue_setNativeMessageQueue(env, obj, nativeMessageQueue);

}


android_os_MessageQueue_nativeInit的主要工作可以分为以下两部分:

1)创建一个NativeMessageQueue类型的对象,并增加其引用计数。

2)调用android_os_MessageQueue_setNativeMessage Queue方法,将NativeMessageQueue与Java层的Message Queue关联起来。

NativeMessageQueue的类层次如图7-1所示。

7.2.2 创建Java层的MessageQueue对象 - 图1

图 7-1 NativeMessageQueue的类层次