导入前只是存在rawcontacts和data表里, 而导入后就存在contacts表里了, 还未确定,待研究.....
之前理解的不正确, 即使sim卡上的联系人未导入到本地电话本,也会存储在contacts表里, 只是会用一个contact_type(0,11,12..)来表明是卡上的数据还是本地的数据。
以君正平台-android2.2代码为例,电话本模块的进程名字是android.process.acore,主要包括两个APK,contacts.apk 和contactsprovider.apk。
1. ContactsProvider.apk会启动一个广播接收器SystemStartReceiver来接收发来的广播,首先它会接收到android.intent.action.BOOT_COMPLETED,将raw_contacts表里所有非本地联系人的数据都删除掉
2. 然后读取当前是否存在GSM卡或者CDMA卡,如果存在,则发送android.intent.action.SYNC_ICC_CARD_CONTACTS广播消息,消息中携带的数据包括SIM卡的type和index,发送这个消息的目的就是告诉系统要对哪张sim卡上的联系人进行读取了,
3. 当然这个消息也是被SystemStartReceiver自己接受到,这里会启动一个thread来执行读取sim卡联系人的操作,thread内容实现run函数,在run函数中启动一个emptyService来延长thread的生命周期ÿ