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虚拟机分配的用来保存用户字典文件名的字节数组(调用JNI接口函数释放)
函数im_open_decoder_fd声明在文件include/pinyinime.h里,从注释可以看到,Android平台的系统静态字典是内嵌在整个应

本文详细介绍了Android PinyinIME输入法的启动过程,特别是C++函数`nativeImOpenDecoderFd`的调用栈和功能。该函数用于启动底层服务,涉及系统静态字典和用户字典的处理。在Android.mk文件中,需要特殊设置以避免静态字典被压缩。类`MatrixSearch`是实现PinyinIME核心功能的关键,负责拼音序列的解析和匹配。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



