Android数据连接浅析
在Android中,应用对数据连接的操作需要通过framework提供的以下两个服务类frameworks/base/services/java/com/android/server/ConnectivityService数据连接的系统级服务类,frameworks/base/core/java/android/net/ConnectivityManager数据连接的应用层管理类。下面就ConnectivityService的建立和彩信请求建立数据连接的过程做简单描述,欢迎有兴趣的朋友一起交流讨论。
1,ConnectivityService的启动,和驻留系统进程。
系统启动时,在SystemServer中调用ConnectivityService.getInstance(Context context)获取实例,
再将其加入ServiceManager,常驻系统进程。
connectivity = ConnectivityService.getInstance(context);
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);
获取ConnectivityService实例时,调用的是内部的一个Thread。这里使用thread来创建ConnectivityService实例,可想而知实例化时做了很多耗时操作。
public static ConnectivityService getInstance(Context context) {
return ConnectivityThread.getServiceInstance(context);
}
在该thread的run中来实例化ConnectivityService,为此线程还添加了looper循环,提供给ConnectivityService实例化时的消息队列使用,消息队列需要looper循环的支持。
protected void onEnableNewApn() { // change our retry manager to use the appropriate numbers for the new APN if (mRequestedApnType.equals(Phone.APN_TYPE_DEFAULT)) { mRetryMgr = mDefaultRetryManager; } else { mRetryMgr = mSecondaryRetryManager; } mRetryMgr.resetRetryCount(); log("onEnableNewApn REASON_APN_SWITCHED"); if (isAllPdpDisconnectDone()) { trySetupData(Phone.REASON_APN_SWITCHED); } else { cleanUpConnection(true, Phone.REASON_APN_SWITCHED); } }