Android 用户词库 UserDictionry
本文来自安卓航班开发者:www.apkway.com
关于android。process。acore
经常看到android。process。acore会报异常,我启动android2。3。3的模拟器看了一下logcat,android。process。acore进程包含了这么几个ContentProvider:
com。android。providers。contacts。SocialProvider
com。android。providers。applications。ApplicationsProvider
com。android。providers。contacts。ContactsProvider
com。android。providers。contacts。CallLogProvider
com。android。providers。userdictionary。UserDictionaryProvider
检查一下这几个apk的AndroidManifest。xml,都有这么一个属性:android:process="android。process。acore"。看来,只要上面这几个ContentProvider其中一个出问题导致整个进程挂了的话,其它的也会受影响。
关于BackupManagerService
系统中有一个BackupManagerService服务,这个主要负责把应用程序的数据up到服务器上,当某一天用户需要恢复数据时,再从服务器上把用户的数据down下来交给各个应用。BackupManagerService有一个设定的up周期。哪个APK有数据要进行上面这样的backup/restore服务的话,只需要在AndroidManifest。xml的application标签中增加这个属性:android:backupAgent="DictionaryBackupAgent"。属性的值是实现功能的具体类。比如UserDictionaryProvider的DictionaryBackupAgent,LatinIME的LatinIMEBackupAgent。这样,当系统的BackupManagerService到了设定的周期,要进行数据同步时,就会调用BackupAgent的子类中的接口。
与BackupManagerService相关的AndroidManifest。xml属性还有android:allowClearUserData,android:killAfterRestore,等。
关于UserDictionaryProvider
UserDictionaryProvider存储了三个字段:workd,frequency,locale。即,某个单词的使用频率和所属语言,主要与输入法相关。比如,我们在输入法里面看哪个词用的比较多,就把它添加到UserDictionaryProvider里面,也可以在用户输入单词时,从UserDictionaryProvider里面取出数据来供用户备选。另外,UserDictionaryProvider还实现了一个BackupAgent来做数据的backup/restore。
向UserDictionaryProvider里面添加数据,目前我已经发现了两种方式:一个是设置->语言和键盘->用户词库,在这里可以手工添加。另一个就是使用Android自带的英文输入法时,在备选词列表上面长按某个备选词,程序就会把这个备选词添加到UserDictionaryProvider里。至于中文输入法,不管是搜狗还是谷歌拼音,都还没有发现与UserDictionaryProvider相关的功能。搜狗有自己的词库同步功能,但使用的不是UserDictionaryProvider词库。
另外,访问UserDictionaryProvider的方法不止传统的ContentProvider一种方式,framework层的android。provider。UserDictionary里面也提供了一些访问接口。
屏蔽UserDictionaryProvider的功能
两种方案:1、将UserDictionaryProvider中的增删改查接口保留,但接口中的实现去掉。为什么不去掉?因为framework向应用程序提供了访问UserDictionaryProvider的API。2、是在使用Android英文输入法时出的问题,那就不要让Android英文输入法访问UserDictionaryProvider了(修改一下/packages/app/LatinIME//UserDictionary。java文件)。
在LatinIME源码里面的AndroidManifest。xml文件中去掉android:backupAgent属性。