【转】Android来电过程函数调用

1) InCallScreen.java
1.1) 执行handlerMessage()方法,可能是由后台程序触发的。
1.2) 执行onPhoneStateChanged()方法,由1.1)的handlerMessage()方法调用。
1.3) 执行1.1)--1.2)

2) CallNotifier.java
2.1) 执行handlerMessage()方法,可能是由后台程序触发的。
2.2) 执行onNewRingingConnection()方法,由2.1)的handlerMessage()方法调用。
2.3) 再执行startIncomingCallQuery()方法,由2.2)的onNewRingingConnection()方法调用。
2.4) 再 执行onQueryComplete()方法。该方法在startIncomingCallQuery()方法中有调用语句,但是根据LogCat呈现的 前后顺序,这里的onQueryComplete()并不是由startIncomingCallQuery()方法触发的,可是除此函数为找不到其他触 发点。
2.5) 再执行onCustomRingQueryComplete()方法,由2.4)的onQueryComplete()方法调用。

3) InCallScreen.java
3.1) 执行onNewIntent()方法,应该是由后台程序触发。
3.2) 执行onResume()方法,应该是由后台程序触发。
3.3) 再执行isBuletoothAudioConnected()方法,由3.2)的onResume()方法调用。
3.4) 再执行setInCallScreenMode()方法,由3.2)的onResume()方法调用。
3.5) 再执行updateMenuButtonHint()方法,由3.4)的setInCallScreenMode()方法调用。

4) PhoneApp.java
4.1) 执行updateWakeState()方法,由3.2)的onResume()方法调用。

5) InCallScreen.java
5.1) 执行onPhoneStateChanged()方法,应该是由后台程序触发。
5.2) 再执行updateScreen()方法,由5.1)的onPhoneStateChanged()方法调用。

6) CallCard.java
6.1) 执行updateState()方法,由5.2)的updateScreen()方法调用。
6.2) 执行updateRingingCall()方法方法,由6.1)的updateState()方法调用。
6.3) 再执行displayMainCallStatus()方法,由6.2)的updateRingingCall()方法调用。
6.4) 再执行updateCardTitleWidgets()方法,由6.3)的displayMainCallStatus()方法调用。
6.5) 再执行getTitleForCallCard()方法,由6.4)的updateCardTitleWidgets()方法调用。
6.6) 再执行updateDisplayForPerson()方法,由6.3)的displayMainCallStatus()方法调用。
6.7) 再执行updatePhoneForCallState()方法,由6.3)的displayMainCallStatus()方法调用。
6.8) 再执行displayOnHoldCallStatus()方法,由6.2)的updateRingingCall()方法调用。
6.9) 再执行updateOngoingCallStatus()方法,由6.2)的updateRingingCall()方法调用。

7) InCallCard.java
7.1) 执行updateMenuButtonHint()方法,由5.2)的updateScreen()方法调用。

8) PhoneApp.java
8.1) 执行updateWakeState()方法,该方法可能是由以下操作引发的:onResume(),onPause(),onPhoneStateChanged(),onDisconnect(),handleMessage()。

9) InCallCard.java
9.1) 执行handleMessage()方法,我觉得应该是后台触发的。目前还没有找到合理的解释。
9.2) 再执行internalResolveIntent()方法,由9.1)的handleMessage()方法调用。
9.3) 执行onWindowFocusChanged()方法,不知道从哪里调用的。
9.4) 执行isBluetoothAudioConnected()方法,该方法可能是由onClick()调用。
9.5) 执行enableSensor()方法,该方法可能是由onClick()调用。
9.6) 执行updateScreen()方法,该方法可能是由以下操作引发的: handleMessage(),onPhoneStateChanged(),onDisconnect(),syncWithPhoneState(),placeCall()。

10) 执行6)--7)

11) InCallScreen.java
11.1) 执行handleMessage()方法,我觉得应该是后台触发的。
11.2) 再执行internalResolveIntent()方法,由11.1)的handleMessage()方法调用。
11.3) 再执行enableSensor()方法,由11.1)的handleMessage()方法调用。

12) PhoneApp.java
12.1) 执行disableKeyguard()方法,由11.1)的handleMessage()方法调用。

13) InCallScreen.java
13.1) 执行onClick()方法。

14) PhoneUtils.java
14.1) 执行hangup()方法,不知道怎么调用的。
14.2) 执行dismissMenu()方法,由13.1)的onClick()方法调用。

15) CallNotifier.java
15.1) 执行handleMessage()方法。
15.2) 再执行onDisconnect()方法,由15.1)的handleMessage()方法调用。
15.3) 再 执行run()方法,肯定是在onDisconnect()方法中调用,我没有找到的调用代码,不过存在 SignalInfoTonePlayer(ToneGenerator.TONE_CDMA_SIGNAL_OFF).start();(Starts the new Thread of execution. The run() method of the receiver will be called by the receiver Thread itself (and not the Thread calling start()).),所以我推测应该是由这句代码来调用run的。

16) Ringer.java
16.1) 执行stopRing()方法,由15.2)的onDisconnect()方法调用。
16.2) 再执行makeLooper()方法,由16.1)的stopRing()方法调用。

17) CallNotifier.java
17.1) 执行resetAudioStateAfterDisconnect()方法,由15.2)的onDisconnect()方法调用。

18) PhoneApp.java
18.1) 执行updateWakeState()方法,不知道怎么调用。

19) CallNotifier.java
19.1) 执行showMissedNotification()方法,肯定由15.2)的onDisconnect()方法调用,但是其中怎么通过其他函数调用此函数不是很清楚。

20) InCallScreen.java
20.1) 执行onDisconnect()方法,不知道怎么调用。
20.2) 再执行delayedCleanupAfterDisconnect()方法,由20.1)的onDisconnect()方法调用。
20.3) 执行finish()方法,不知道怎么调用。
20.4) 执行enableSensor()方法,不知道怎么调用。
20.5) 执行onPhoneStateChanged()方法,不知道怎么调用。
20.6) 再执行updateScreen()方法,由20.5)的onPhoneStateChanged()方法调用。
20.7) 再执行dismissMunu()方法,由20.6)的updateScreen()方法调用。

21) CallCard.java
21.1) 执行updateState()方法,由20.6)的updateScreen()方法调用。
21.2) 再执行updateNoCall()方法,由21.1)的updateState()方法调用。
21.3) 再执行displayMainCallStatus()方法,由21.2)的updateNoCall()方法调用。
21.4) 再执行displayOnHoldCallStatus()方法,由21.2)的updateNoCall()方法调用。
21.5) 再执行displayOngoingCallStatus()方法,由21.2)的updateNoCall()方法调用。

22) InCallScreen.java
22.1) 执行updateMenuButtonHint()方法,由20.6)的updateScreen()方法调用。

23) PhoneApp.java
23.1) 执行updateWakeState()方法,由20.5)的onPhoneStateChanged()方法调用。

24) InCallScreen.java
24.1) 执行onSaveInstanceState()方法,不知道怎么调用的。
24.2) 执行onPause()方法,不知道怎么调用的。
24.3) 再执行dismissMenu()方法,由24.2)的onPause()方法调用。
24.4) 再执行dismissAllDialogs()方法,由24.2)的onPause()方法调用。
24.5) 再执行enableSensor()方法,肯定由24.2)的onPause()方法调用其他函数,再调用到此函数。

25) PhoneApp.java
25.1) 执行reenableKeyguard()方法,由24.2)的onPause()方法调用。
25.2) 执行updateWakeState()方法,由24.2)的onPause()方法调用。

26) InCallScreen.java
26.1) 执行onWindowFocusChanged()方法,不知道怎么调用执行该函数。
26.2) 执行handleMessage()方法,不知道怎么调用执行该函数。
26.3) 执行resetScreen()方法,不知道怎么调用执行该函数。
26.4) 执行26.2)和26.3)

27) Ringer.java
27.1) 执行stopRing()方法,不知道怎么调用执行该函数。
27.2) 再执行makeLooper()方法,由27.1)的stopRing()方法调用。

28) 注:自己挂断电话的时候,执行上面所有步骤;
        对方挂断电话的时候,不执行13)和14);
        不接听的时候,不执行14)。

转自 http://yueguc.iteye.com/blog/1042773


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值