android 网络连接 大体走向

原创 2012年03月24日 11:29:57
系统中对 网络的判断和选择 是在 Connectivityservice这个服务中来处理的,在系统启动的时候会 启动 这个系统服务: 
在android内部,用framework/base/core/res/res/values/config.xml中定义了网络的类型: 
public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI; 
并设置了默认的网络连接是TYPE_WIFI. 
ConnectivityManager的方法是通过AIDL的使用,调用ConnectivityService中的方法来实现的。ConnectivityService继承了IConnectivityManage.stub. 
在ConnectivityService内部,定义了两个类来解析xml中的网络类型,
并通过以下代码,来给网络分配优先级, 
mPriorityList = new int[naStrings.length]; 

int priority = 0; //lowest 
int nextPos = naStrings.length-1; 
while (nextPos>-1) { 
for (int i = 0; i < mNetAttributes.length; i++) { 
if(mNetAttributes[i].mPriority == priority) { 
mPriorityList[nextPos--] = i; 


priority++; 


mNetRequestersPids = 
new ArrayList[ConnectivityManager.MAX_NETWORK_TYPE+1]; 
for (int i=0; i<=ConnectivityManager.MAX_NETWORK_TYPE; i++) { 
mNetRequestersPids[i] = new ArrayList(); 



其中,TYPE_MOBILE_HIPRI的优先级最高,其次为TYPE_MOBILE_MMS,TYPE_MOBILE_SUPL,TYPE_MOBILE_DUN, 优先级最低的为TYPE_WIFI,TYPE_MOBILE。在这两个网络类型中,TYPE_WIFI大于TYPE_MOBILE的优先级, 在打开wifi的连接后,mobile网络会被关闭。当wifi网络连接关闭后,mobile网络会重新连接。 
在ConnectivityService的构造函数中 启动 网络监视器, 在settings中可以设置网络连接,比如打开wifi,打开bluetooth, 设置apn的连接等等,在设置完成后,设置的消息会存在一个数据库中保存,并发送系统消息来广播网络设置的变化。 在网络监视器中捕捉了settings中发出的相应的网络广播信息, 网络监视器中注册了settings中网络变化的信息,有变化会做相应的处理,并将处理的结果存储在NetworkInfo类的一个对象中,在ConnectivityService中通过 public NetworkInfo getNetworkInfo(int networkType)方法可以得知当前networkType类型网络的连接情况。 


在app中,我们可以通过ConnectivityManager来获取当前的网络信息,并能指定当前程序需要的网络类型: 
ConnectivityManager mCnn = context.getSystemService(context.NONNECTIVITY_SERVICE); 
NetworkInfo mNetinfo = mCnn.getActiveNetworkInfo(); 
mCnn.setNetworkPreference(int preference);//设定首选网络类型。 
假如没有设定,网络类型为系统默认。在wifi,3G网络同时存在的情况下,系统会默认的调用wifi网络,加载wifi的驱动,走wifi网络。
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 系列 2.7设计各种APP

2.7设计 会议/兵营/黑客马拉松/企业机构 (Conference/Camp/Hackathon/Institution)应用程序 问题 你想设计一个应用程序,用于在会议,国际研讨会网络(Bar...
  • sergeycao
  • sergeycao
  • 2017年01月06日 10:15
  • 187

Android 的网络判定(网络连接类型和监听网络连接变化)

现在,Android手机作为市场占有量最大的移动设备,拥有着无数的需要连接网络的App,同时人们也渐渐不能离开需要网络的生活,相信大家都知道,在一些IMApp,类似于QQ,Wechat等通信工具中,并...
  • gongzhiyao3739124
  • gongzhiyao3739124
  • 2016年10月14日 20:03
  • 3680

《从技术走向管理》读后感

近日,本人连续花了两个周末的时间阅读完了《从技术走向管理》这本书籍,仔细读完后个人颇有感触。作为部门新晋的管理菜鸟,本人同样也遇到了与书中相似的诸多困惑,这些困惑容易是人迷失方向。     曾经...
  • huangxinfeng
  • huangxinfeng
  • 2015年07月14日 08:50
  • 2888

Android 监听网络连接状态

当然离不开广播public class NetBroadcastReceiver extends BroadcastReceiver { public NetBroadcastReceiver(...
  • jiaoyaning1210
  • jiaoyaning1210
  • 2016年09月13日 14:25
  • 1267

Android视图架构详解

作者: ztelur 联系方式:segmentfault,csdn,github 转载请注明原作者、文章来源,链接,版权归原文作者所有。  最近一直在研究View的绘制相关的机制,发现需要补充一...
  • u012422440
  • u012422440
  • 2016年04月17日 15:13
  • 6399

Android 检查网络连接状况,并在网络连接异常时弹出设置连接

/** * 检测网络是否连接 * @return */ private boolean checkNetworkState() { boolean flag = false;       ...
  • liangzhuangdongtou
  • liangzhuangdongtou
  • 2016年04月15日 10:38
  • 2251

ip数据流走向图解(图)

  • jasontome
  • jasontome
  • 2011年11月06日 14:00
  • 1141

android当前网络连接类型判断

之前用到判断网络状态,有些情况下还需要判断是wifi网络,还是移动网络,所以,干脆就把这个工具类分享了,也用javadoc,工具生成了大致的文档。简单可以看下。 package net.nyist...
  • wangyg1990
  • wangyg1990
  • 2013年07月10日 17:14
  • 1851

走向架构师之路---开博寄语

     一个小手术让我在医院躺了16天,开始几天很烦躁,正是项目大决战的时候,而我却临阵退缩,有力使不上。后来几天,慢慢的开始思考一些问题,回顾了几年来做程序员的历程,回顾了出来工作的两年里的前前后...
  • cutesource
  • cutesource
  • 2009年09月12日 13:40
  • 6106

Android4种网络连接方式的比较

Volley可以说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Uni...
  • Checkiming
  • Checkiming
  • 2017年07月10日 12:25
  • 837
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 网络连接 大体走向
举报原因:
原因补充:

(最多只允许输入30个字)