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 中的 ...
随机推荐
- chgrp权限命令
功能说明:变更文件或目录的所属群组. 语 法:chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][-- ...
- C++11的for循环的新用法
字符串 string str = "this is a string"; for(auto ch : str) cout << ch << endl; 等价 ...
- CF 500B New Year Permutation
传送门 题目大意 给你一个数列,再给你一个矩阵,矩阵的(i,j)如果为1就表示可以将i,j位置上的数交换,问任意交换之后使原数列字典序最小并输出. 解题思路 因为如果i与j能交换,j与k能交换,那么i ...
- 前端(Node.js)(1)-- 初识Node.js
1.认识 Node.js 诞生.发展.应用现状.生态圈等方面 1.1. 2008年 RyanDahl的目标是创建一个易扩展.适用于现代Web应用通信的服务器平台 1.2.国内外的应用情况 Linked ...
- webstorm格式化代码快捷键
ctrl+alt+L 把网易云音乐的快捷键关了就可以了
- input输入框的input事件和change事件
input输入框的onchange事件,要在 input 失去焦点的时候才会触发: 在输入框内容变化的时候不会触发change,当鼠标在其他地方点一下才会触发: onchange 事件也可用于单选框与 ...
- WWDC 上讲到的 Objective C / LLVM 改进
https://developer.apple.com/wwdc/videos/ Advances in Objective-C What's New in the LLVM Compiler 下面是 ...
- Vue. 之 npm安装 axios
Vue. 之 npm安装 axios 使用指令: cnpm install axios
- 2019.9.27 csp-s模拟测试53 反思总结
这个起名方式居然还有后续?! 为什么起名不是连续的?! T1想了半天,搞出来了,结果数组开小[其实是没注意范围].T2概率期望直接跳,后来翻回来写发现自己整个理解错了期望的含义[何].T3错误想到赛道 ...
- C#基础之特性
官网地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/attributes/accessing- ...