细想下从毕业到现在已经有4年了,Tele杂七杂八的各方面都做了些,其中Call属于做的最久的。但一直只停留在开发需求以及fix bug的阶段,一直没有好好的整理下。趁此项目空闲期间,整理下Call的各个流程以及之前项目上的各种需求以及各种古怪的case.现阶段能想到的有以下几类:
1.前期概括
2.MO call
3.MT call
4.Conference call
5. VT call
6. 账户选择
7.其他case
往后就大致按照这个顺序来总结在Call遇到的各种问题,算是做个总结.
前期概括
1. 模块划分
在Call的过程中,主要涉及到模块分为以下几部分:
名称 | 作用 |
Dialer | 拨号 & 显示call log |
InCallUI | 显示通话界面 & 通话界面button操作 |
Telecomm | 逻辑处理 |
Telephony | 逻辑处理 |
Tele/FW | 逻辑处理 |
2.各模块进程
各模块的进程名称如下
模块 | 进程 |
Dialer | com.android.dialer |
InCallUI | com.android.incallui |
Telecomm | com.android.server.telecom |
Telephony | com.android.phone |
3.查看进程
通常在解决问题时,需要查看某个模块的进程,其命令是:adb shell ps
得到的参数意义:
参数 | 解释 |
USER | 进程当前用户 |
PID | Process ID,进程ID |
PPID | Process Parent ID,进程的父进程ID |
VSIZE | Virtual Size,进程的虚拟内存大小 |
RSS | Resident Set Size,实际驻留”在内存中”的内存大小 |
WCHAN | 休眠进程在内核中的地址 |
PC | Program Counter |
NAME | 进程名 |
4.名词解释
名词 | 解释 |
Call | 某一通电话 |
MO | Outgoing Call |
MT | InComing Call |
Conference | 电话会议 |
Connection | 链接(注释1) |
VILTE | Video call over LTE |
VOLTE | Voice call over LTE |
CallState | 当前Call的状态(注释2) |
PhoneState | 当前设备的状态(注释2) |
注释1:此处的connection 要与区分开。一通call最多可以有6个connection。比如说A给B打一通电话,那么此时就是一通Call,一个connection.然后Ahold了这通电话,再打电话给C,那么此时就是一通Call,两个Connection.最后A merge了这两通电话,merge成功后,就只有一通Call了(只不过这个Call的参与者是A,B,C三方),但是connection却有两个(?)
注释2 : CallState 是表示当前这通call的状态,这个主要是供内部(Telephony)使用的,根据Call的状态来更新状态等等;而PhoneState则是表示当前设备的状态,这个是提供给外部使用的,比如music就要监听Phone的状态来判断是否需要中断播放音乐。