--- by Zhonglong
问题描述
手机联系人来电或去电,通话结束后,打开通话记录列表时,新通话记录先显示电话号码。过一会儿才显示联系人姓名,体验不佳。
问题分析
按照Android原生设计,通话记录数据库中,除了保存电话号码,还会缓存联系人信息。当电话显示通话记录列表时,先查询通话记录数据库,显示电话号码或者缓存的联系人姓名;再针对每条通话记录去查询联系人数据库,对比缓存的联系人信息是否一致,若不一致则更新联系人信息缓存。
表1 通话记录数据库缓存的联系人信息
通话结束后,将本次通话记录保存到数据库,此时只保存电话号码,直到这条通话记录首次显示时才去缓存联系人信息。这就导致第一次显示通话记录时,只能显示电话号码,等待查询联系人数据库再更新和显示联系人姓名。
解决思路
针对原生设计的这个缺陷,MTK在Android M版本引入一个补丁,每次显示通话记录列表时,做联合查询(UNION),即查询通话记录数据库,查询联系人数据库