数据业务建立流程之DcTracker创建过程(原)

2024-05-26 10:18

本文主要是介绍数据业务建立流程之DcTracker创建过程(原),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、DcTracker介绍


        DcTracker是Telephony框架中负责数据业务的核心(类似于GsmCallTracker是通话业务核心,GsmServiceStateTracker是网络CS业务的核心),所有对数据网络的请求(打开关闭数据开关、切换数据卡、修改APN参数等)都会发送到该处理中心来处理。本节所涉及的大部分代码也都在该对象中。下面我们先来看该对象的初始化流程。

        DcTracker是在Phone对象创建过程中被创建的,确切来说,如果当前使用的是GSMPhone,那么在GSMPhone创建过程中就会创建DcTracker对象:
        @GSMPhone.javapublic GSMPhone (Context context, CommandsInterface ci, PhoneNotifier notifier, boolean unitTestMode) {//创建DcTracker对象,传递的参数就是当前的GSMPhone对象mDcTracker = new DcTracker(this);}
        那么DcTracker是什么属性呢?
        public final class DcTracker extends DcTrackerBase {}public abstract class DcTrackerBase extends Handler {}
        从这里看到,DcTracker的父类是DcTrackerBase, 他们的本质都是Handler
        然后来看DcTracker的初始化过程:
        @DcTracker.javapublic DcTracker(PhoneBase p) {super(p);mDataConnectionTracker = this;//注册监听器update();//监听APN状态mApnObserver = new ApnChangeObserver();p.getContext().getContentResolver().registerContentObserver(Telephony.Carriers.CONTENT_URI, true, mApnObserver);//从networkAttributes数组中初始化APN参数initApnContexts();for (ApnContext apnContext : mApnContexts.values()) {IntentFilter filter = new IntentFilter();filter.addAction(INTENT_RECONNECT_ALARM + '.' + apnContext.getApnType());filter.addAction(INTENT_RESTART_TRYSETUP_ALARM + '.' + apnContext.getApnType());mPhone.getContext().registerReceiver(mIntentReceiver, filter, null, mPhone);}ConnectivityManager cm = (ConnectivityManager)p.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);//添加各种网络请求过滤器,用于根据这些过滤器发起不同的数据连接mNetworkFilter = new NetworkCapabilities();mNetworkFilter.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_DUN);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_FOTA);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_CBS);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_IA);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_RCS);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_XCAP);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);mNetworkFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);//初始化数据网络的NetworkFactory,并设置数据网络的分值为50mNetworkFactory = new TelephonyNetworkFactory(this.getLooper(), p.getContext(), "TelephonyNetworkFactory", mNetworkFilter);mNetworkFactory.setScoreFilter(50);mNetworkFactoryMessenger = new Messenger(mNetworkFactory);cm.registerNetworkFactory(mNetworkFactoryMessenger, "Telephony");//初始化紧急APNinitEmergencyApnSetting();addEmergencyApnSetting();mProvisionActionName = "com.android.internal.telephony.PROVISION" + p.getPhoneId();}
        在上面这个初始化过程中,主要完成了三个任务:
        1、初始化各种监听器;
        2、初始化TelephonyNetworkFactory对象;

这篇关于数据业务建立流程之DcTracker创建过程(原)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004186

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面