1,去电界面启动分析
在去电流程中论述过,会调用CallsManager的startOutgoingCall启动拨号界面,在该方法中会调用addCall方法,
此时还处于services telecom进程中。
addCall(call);
addCall方法如下,
for (CallsManagerListener listener : mListeners) {
if (Log.SYSTRACE_DEBUG) {
Trace.beginSection(listener.getClass().toString() + " addCall");
}
listener.onCallAdded(call);
if (Log.SYSTRACE_DEBUG) {
Trace.endSection();
}
}
mListeners定义如下,
private final Set<CallsManagerListener> mListeners = Collections.newSetFromMap(
new ConcurrentHashMap<CallsManagerListener, Boolean>(16, 0.9f, 1));
该哈希表是线程安全的。
并且在CallsManager的构造方法中就会添加监听器,
mListeners.add(mInCallController);
mListeners.add(mRinger);
当然,还可以调用addListener方法添加监听器,