android源码有pinyinime,Android PinyinIME 源码笔记 -- 2. 底层服务启动

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

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) {...}

函数的调用栈如下图示:

a4c26d1e5885305701be709a3d33442f.png

函数首先从Java虚拟机空间通过JNI接口取得静态系统字典文件描述符并克隆到本地C++程序空间文件描述符newfd和保存用户字典文件名的字节数组fud。然后与传入的静态字典文件开始位置的偏移startoffset和文件长度longth一起作为参数调用函数im_open_decoder_fd(),最后关闭newfd,并释放Java虚拟机分配的用来保存用户字典文件名的字节数组(调用JNI接口函数释放)

函数im_open_decoder_fd声明在文件include/pinyinime.h里,从注释可以看到,Android平台的系统静态字典是内嵌在整个应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值