Close spell-checking dictionaries in a background thread
Bug: 6584677 Change-Id: Ifd9b0f995f4e0cf4d35a7ecde767826ab976f0b8
This commit is contained in:
parent
69b4e411e1
commit
769cecf7e7
1 changed files with 25 additions and 20 deletions
|
@ -372,27 +372,32 @@ public class AndroidSpellCheckerService extends SpellCheckerService
|
|||
mUserDictionaries = Collections.synchronizedMap(new TreeMap<String, Dictionary>());
|
||||
final Map<String, Dictionary> oldWhitelistDictionaries = mWhitelistDictionaries;
|
||||
mWhitelistDictionaries = Collections.synchronizedMap(new TreeMap<String, Dictionary>());
|
||||
for (DictionaryPool pool : oldPools.values()) {
|
||||
pool.close();
|
||||
}
|
||||
for (Dictionary dict : oldUserDictionaries.values()) {
|
||||
dict.close();
|
||||
}
|
||||
for (Dictionary dict : oldWhitelistDictionaries.values()) {
|
||||
dict.close();
|
||||
}
|
||||
synchronized (mUseContactsLock) {
|
||||
if (null != mContactsDictionary) {
|
||||
// The synchronously loaded contacts dictionary should have been in one
|
||||
// or several pools, but it is shielded against multiple closing and it's
|
||||
// safe to call it several times.
|
||||
final Dictionary dictToClose = mContactsDictionary;
|
||||
// TODO: revert to the concrete type when USE_BINARY_CONTACTS_DICTIONARY is no
|
||||
// longer needed
|
||||
mContactsDictionary = null;
|
||||
dictToClose.close();
|
||||
new Thread("spellchecker_close_dicts") {
|
||||
@Override
|
||||
public void run() {
|
||||
for (DictionaryPool pool : oldPools.values()) {
|
||||
pool.close();
|
||||
}
|
||||
for (Dictionary dict : oldUserDictionaries.values()) {
|
||||
dict.close();
|
||||
}
|
||||
for (Dictionary dict : oldWhitelistDictionaries.values()) {
|
||||
dict.close();
|
||||
}
|
||||
synchronized (mUseContactsLock) {
|
||||
if (null != mContactsDictionary) {
|
||||
// The synchronously loaded contacts dictionary should have been in one
|
||||
// or several pools, but it is shielded against multiple closing and it's
|
||||
// safe to call it several times.
|
||||
final Dictionary dictToClose = mContactsDictionary;
|
||||
// TODO: revert to the concrete type when USE_BINARY_CONTACTS_DICTIONARY
|
||||
// is no longer needed
|
||||
mContactsDictionary = null;
|
||||
dictToClose.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
}
|
||||
|
||||
private DictionaryPool getDictionaryPool(final String locale) {
|
||||
|
|
Loading…
Reference in a new issue