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消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值