大致流程图如下
首先是监听到有数据网络活动,然后进行处理:
PhoneStateListener.java # handleMessage()
case LISTEN_DATA_ACTIVITY:
PhoneStateListener.this.onDataActivity(msg.arg1);
PhoneStateListener中的onDataActivity()方法未进行处理,交由其子类 MobilePhoneStateListener 进行处理,其是 MobileSignalController 的内部类。
MobileSignalController.java -> MobilePhoneStateListener
@Override
public void onDataActivity(int direction) {
if (DEBUG) {
Log.d(mTag, "onDataActivity: direction=" + direction);
}
setActivity(direction);
}
void setActivity(int activity) {
// mCurrentState 是 MobileState 的对象,用来存储和手机有关的状态
// activityIn,activityOn 代表是否有数据流量活动
mCurrentState.activityIn = activity == TelephonyManager.DATA_ACTIVITY_INOUT
|| activity == TelephonyManager.DATA_ACTIVITY_IN;
mCurrentState.activityOut = activity == TelephonyManager.DATA_ACTIVITY_INOUT
|| activity == TelephonyManager.DATA_ACTIVITY_OUT;
if (mConfig.readIconsFromXml) {
mCurrentState.dataActivity = activity;
}
// 保存好状态后,通知监听器做出响应
notifyListenersIfNecessary();
}
notifyListenersIfNecessary的实现在MobileSignalController的父类SignalController中,最终会调用到其自身中的notifyListeners()中。
@Override
public void notifyListeners(SignalCallback callback) {
if (mConfig.readIconsFromXml) {
generateIconGroup();
}
// 此处省略
...