PinyinIME输入法启动过程介绍见“附A.1 输入法的启动”http://blog.sina.com.cn/s/blog_4177a2e20100lsh0.html,从该文介绍可知当PinyinDecoderService创建时,初始化工作包括了收集系统静态字典文件信息以及用户字典路径信息,然后调用C++代码接口nativeImOpenDecoderFd完成底层服务的启动(另一个C++代码接口nativeImOpenDecoder也完成同样的功能,除了传递不同的参数)。
下图是C++函数nativeImOpenDecoderFd的原形如下:
JNIEXPORT jboolean JNICALL nativeImOpenDecoderFd(JNIEnv* env,
jclass jclazz,
jobject fd_sys_dict,
jlong startoffset,
jlong length,
jbyteArray fn_usr_dict) {...}
函数的调用栈如下图示:
函数首先从Java虚拟机空间通过JNI接口取得静态系统字典文件描述符并克隆到本地C++程序空间文件描述符newfd和保存用户字典文件名的字节数组fud。然后与传入的静态字典文件开始位置的偏移startoffset和文件长度longth一起作为参数调用函数im_open_decoder_fd(),最后关闭newfd,并释放Java虚拟机分配的用来保存用户字典文件名的字节数组(调