Android切換系統語音環境後立即進入聯繫人,如果聯繫人較多,容易出現無響應問題,原因是:
剛切換語音時,聯繫人數據庫正在更新,這時進入通訊錄時要查詢加載聯繫人,必須等聯繫人數據庫更新完後才能查詢,出現響應不及時。
流程如下:
ContactsProvider2.java的onConfigurationChanged() ---->initForDefaultLocale() , verifyLocale()--->在 verifyLocale()開啓了AsyncTask,後臺做mDbHelper.setLocale(ContactsProvider2.this, currentLocale)---->在setLocale()(Regenerates all locale-sensitive data:nickname_lookup, name_lookup and sort )中刪除更新了一些數據,
db.execSQL("DROP INDEX raw_contact_sort_key1_index");
db.execSQL("DROP INDEX raw_contact_sort_key2_index");
db.execSQL("DROP INDEX IF EXISTS name_lookup_index");
loadNicknameLookupTable(db);//Loads common nickname mappings into the database.
insertNameLookup(db);
rebuildSortKeys(db, provider);
createContactsIndexes(db);
這時進入聯繫人,會查詢聯繫人,而前面的正在更新數據庫,未釋放鎖,響應不及時