4.2 同步联系人
当重新插入SIM卡时, SimContactsService 的onCreate方法内的匿名Handler的handleMessage方法对应的处理如下,
case MSG_SIM_REFRESH:
•••
if (mSimState[sub] == SimContactsConstants.SIM_STATE_READY ||
mSimState[sub] == SimContactsConstants.SIM_STATE_LOAD) {
if (!isSimOperationInprocess[sub]) {
handleSimOp(sub);
} else {
Log.d(TAG, "queue refresh sim op");
refreshQueue.put(sub, MSG_SIM_REFRESH);
}
如果正在处理SIM卡,则将消息进行入栈,等前面的处理完成了才接着处理。
handleSimOp方法调用流程图如下,
handleSimOp方法逻辑如下,
1,将isSimOperationInprocess置为true,然后从数据库中删除SIM卡联系人,如果是正常的话,这一步骤在SIM卡拨出的时候就已经完成了。
isSimOperationInprocess[slotId] = true;
deleteDatabaseSimContacts(slotId);
2,调用querySimContacts方法进行插入操作,