Contacts源码分析(一、概述)
代码版本: Contact code version: 4.4.2
一 打开Log开关:
如
if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
Log.d(Constants.PERFORMANCE_TAG, "PeopleActivity.onCreate start");
}
打开: adb shell setprop log.tag.ContactsPerf VERBOSE
该属性值取值顺序为【V,D,I,W,E,A,S】 A表示最高级别的日志,即assert;S表示Suppress,即停止该日志的输出。
次设置重启后实效,也可以将该属性添加在data/local.prop属性文件中,不同的是,只要存在local.prop,该手机重启与否都一样,可以打印VERBOSE
二 Contact代码结构
主要由Contacts, ContactsCommon, ContactsProvider三个工程组成
1. Conctacts: UI, 用户交互逻辑
文件目录
packages/apps/Contacts
2. ContactsCommon: 实现了基类, 工具类和一些数据结构供Contacts使用
文件目录
packages/apps/ContactsCommon
3. ContactsProvider: 联系人数据增删改
文件目录
packages/providers/ContactsProvider
三 数据库结构:
device中存放位置
/data/data/com.android.providers.contacts/databases
contacts2.db : 所有联系人信息
profile.db : 个人信息
1. contacts2.db 中几个重要的表, 跟profile db中表结构差不多
可以添加几个联系人然后把db文件下载下来用SQLiteSpy查看
1) accounts
用于同步contact的账号相关信息
2) contacts
联系人表, 每个联系人对应一行, 只存放一些标志性信息如raw contact id, starred, timestamp等, 具体联系人信息存放在raw_contact和data表中。
不可以直接向此表中插入数据, 用户插入操作通常更改raw_contact表, 然后系统自动merge信息到contact表
3) data
详细信息存放在这个表里, 如联系人姓名, 号码, 地址, 邮箱, 组织等,
信息的类别用mimetype_id来指明, 通过引用raw_contact_id关联到raw_contacts
4) raw_contacts
比contact表更多的信息,很多标志信息, 主要的数据增删改是操作这个表。
与contact表不同的是, 一个联系人(contact_id) 可以对应多行数据, 比如这个联系人存放在多个账户上(account_id)
5) mimetype
索引信息类别, 用于data表
2. 主要视图
1)view_contacts
2) view_data
3) view_raw_contacts
4)view_entities
参考文章
Android 5.0 Contacts源码分析 http://blog.csdn.net/lsmfeixiang/article/details/44856569
Contacts源码分析(一、概述)的更多相关文章
- Netty源码分析(前言, 概述及目录)
Netty源码分析(完整版) 前言 前段时间公司准备改造redis的客户端, 原生的客户端是阻塞式链接, 并且链接池初始化的链接数并不高, 高并发场景会有获取不到连接的尴尬, 所以考虑了用netty长 ...
- Kafka源码分析(一) - 概述
系列文章目录 https://zhuanlan.zhihu.com/p/367683572 目录 系列文章目录 一. 实际问题 二. 什么是Kafka, 如何解决这些问题的 三. 基本原理 1. 基本 ...
- HDFS源码分析一-概述
HDFS 主要包含 NameNode, SecondaryNameNode, DataNode 以及 HDFS Client . 我们从以下这几部分讲: 1. HDFS概述 2. NameNode 实 ...
- Kombu源码分析(一)概述
Celery是Python中最流行的异步消息队列框架,支持RabbitMQ.Redis.ZoopKeeper等作为Broker,而对这些消息队列的抽象,都是通过Kombu实现的.Kombu实现了对AM ...
- Android Small插件化框架源码分析
Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...
- Jvm(jdk8)源码分析1-java命令启动流程详解
JDK8加载源码分析 1.概述 现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架 ...
- ArrayList详解-源码分析
ArrayList详解-源码分析 1. 概述 在平时的开发中,用到最多的集合应该就是ArrayList了,本篇文章将结合源代码来学习ArrayList. ArrayList是基于数组实现的集合列表 支 ...
- [源码分析] 消息队列 Kombu 之 Consumer
[源码分析] 消息队列 Kombu 之 Consumer 目录 [源码分析] 消息队列 Kombu 之 Consumer 0x00 摘要 0x01 综述功能 0x02 示例代码 0x03 定义 3.1 ...
- [源码分析] 消息队列 Kombu 之 Hub
[源码分析] 消息队列 Kombu 之 Hub 0x00 摘要 本系列我们介绍消息队列 Kombu.Kombu 的定位是一个兼容 AMQP 协议的消息队列抽象.通过本文,大家可以了解 Kombu 中的 ...
随机推荐
- dubbo入门学习(二)-----dubbo hello world
一.dubbo hello world入门示例 1.提出需求 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址: 我们现在需要创建两个服务模块进行测试: 模块 功能 订单服务web模块 创 ...
- PAT甲级——A1036 Boys vs Girls
This time you are asked to tell the difference between the lowest grade of all the male students and ...
- hibernate多表关联CascadeType类型的选择
CascadeType.REMOVE//慎用 Cascade remove operation,级联删除操作.删除当前实体时,与它有映射关系的实体也会跟着被删除. CascadeType.MERGE ...
- Newtonsoft.json 二次引用出错解决办法
一.一般在C# 项目中二次引用会出现如下错误: 解决办法:用编辑器打开项目下的文件(*.csproj),可以找到在这个文件中,Newtonsoft.Json的引用,删掉引用,然后在项目中重新引用就可以 ...
- Leetcode443.String Compression压缩字符串
给定一组字符,使用原地算法将其压缩. 压缩后的长度必须始终小于或等于原数组长度. 数组的每个元素应该是长度为1 的字符(不是 int 整数类型). 在完成原地修改输入数组后,返回数组的新长度. 进阶: ...
- mac 终端 常用命令,MacOS 常用终端命令大全,mac 在当前目录打开终端
MacOS 常用终端命令大全:目录操作dircmp——比较两个目录的内容——dircmp dir1 dir2文件操作pg分页格式化显示文件内容——pg filenameod——显示非文本文件的内容—— ...
- linux 调整系统时区
查看当前时间: date 查看当天详细时区 timedatectl 调整为正确时区 timedatectl set-timezone 'Asia/Shanghai'
- OpenLayers在多个矢量图层编辑要素
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- Pycharm 2018激活(Mac版)
第一步,修改host文件 目的:是屏蔽掉Pycharm对激活码的验证 路径:/etc/hosts 在文件最后一行添加文本: 0.0.0.0 account.jetbrains.com 修改后文件如下: ...
- Linxu SSH登陆出现Access Denied错误的解决方法
其实这个问题是从 SCP 过来的.用 SCP 在两台 Linux 服务器之间传送备份文件.输入完 root 密码后,总是出现 Permission denied, please try again. ...