Android中的使用者詞庫——UserDictionry

來源:互聯網
上載者:User

關於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。即,某個單詞的使用頻率和所屬語言,主要與IME相關。比如,我們在IME裡面看哪個詞用的比較多,就把它添加到UserDictionaryProvider裡面,也可以在使用者輸入單詞時,從UserDictionaryProvider裡面取出資料來供使用者備選。另外,UserDictionaryProvider還實現了一個BackupAgent來做資料的backup/restore。
向UserDictionaryProvider裡面添加資料,目前我已經發現了兩種方式:一個是設定->語言和鍵盤->使用者詞庫,在這裡可以手工添加。另一個就是使用Android內建的英文IME時,在備選詞列表上面長按某個備選詞,程式就會把這個備選詞添加到UserDictionaryProvider裡。至於中文IME,不管是搜狗還是Google拼音,都還沒有發現與UserDictionaryProvider相關的功能。搜狗有自己的詞庫同步功能,但使用的不是UserDictionaryProvider詞庫。
另外,訪問UserDictionaryProvider的方法不止傳統的ContentProvider一種方式,framework層的android.provider.UserDictionary裡面也提供了一些提供者。

屏蔽UserDictionaryProvider的功能
兩種方案:1、將UserDictionaryProvider中的增刪改查介面保留,但介面中的實現去掉。為什麼不去掉?因為framework嚮應用程式提供了訪問UserDictionaryProvider的API。2、是在使用Android英文IME時出的問題,那就不要讓Android英文IME訪問UserDictionaryProvider了(修改一下/packages/app/LatinIME/../UserDictionary.java檔案)。
在LatinIME源碼裡面的AndroidManifest.xml檔案中去掉android:backupAgent屬性。
這樣下來,在設定程式中手工添加詞庫後,LatinIME裡面就永遠不會把詞庫中的詞顯示為備選詞了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.