Android Connectivity分析(2)- ConnectivityService

自:人在码途:

[+]

ConnectivityService

描述

Connectivity的核心部分,对ConnectivityManager的实现,实现了IConnectivityManager接口。
在SystemServer的init2中进行初始化,并增加到ServiceManager中。


构造方法

创建单独的thread,进行handler消息处理
创建NetworkFactory,生成各种type的tracker
生成一些default值,比如device name,default dns等
初始化默认优先连接,从Settings.Global.NETWORK_PREFRENCE中读取
从配置文件中读取radio属性和network属性,配置文件在core的string.xml中
创建Tethering共享和Vpn
注册Proxy监听,并加载当前global proxy。Settings.Global.GLOBAL_HTTP_PROXY_PORT中存储相关信息

详细分析


消息处理

  • InternalHandler:处理ConnectivityService内部的消息。
  • NetworkStateTrackerHandler:传递给每个Tracker,处理每种网络连接的状态变化和配置变化。

enforcePreference

关闭其他connection,条件:
  • 不是preference的network
  • 正在连接状态的network
  • 处于available的network
关闭连接的接口:
netTracker.setTeardownRequested(true);

获取NetworkInfo信息

  • 通过getNetworkInfo接口获取。
  • 可传递network 的type和用户的uid。
  • 默认是当前活动状态的network和调用进程的uid
  • 最终通过tracker.getNetworkInfo();返回NetworkInfo

获取LinkProperties

通过tracker.getLinkProperties();来获取

设置radio

通过tracker.setRadio(turnOn)设置

设置mobile data

  • 更新变量保存mobile data enable信息
  • 更新db保存mobile data enable信息
  • 向interal handler发送enable信息
  • mNetTrackers[type].setUserDataEnable(enabled);最终设置

Tether共享

最终通过调用Tether.java来出现相关请求

与INetworkPolicy通信

  • 实现INetworkPolicyListener
  • 注册listener:mPolicyManager.registerListener(mPolicyListener);

发送广播

在handle一些消息后,会发送CONNECTIVITY_ACTION_IMMEDIATE和CONNECTIVITY_ACTION消息

你可能感兴趣的:(转发)