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-1 NativeMessageQueue的类层次